home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / misc / emu / amiSPIMsrc.lha / y.tab.c < prev    next >
C/C++ Source or Header  |  1994-01-19  |  67KB  |  2,422 lines

  1. # define Y_NL 257
  2. # define Y_INT 258
  3. # define Y_ID 259
  4. # define Y_REG 260
  5. # define Y_FP_REG 261
  6. # define Y_STR 262
  7. # define Y_FP 263
  8. # define Y_ABS_D_OP 264
  9. # define Y_ABS_S_OP 265
  10. # define Y_ADDIU_OP 266
  11. # define Y_ADDI_OP 267
  12. # define Y_ADDU_OP 268
  13. # define Y_ADD_D_OP 269
  14. # define Y_ADD_OP 270
  15. # define Y_ADD_S_OP 271
  16. # define Y_ANDI_OP 272
  17. # define Y_AND_OP 273
  18. # define Y_BC0F_OP 274
  19. # define Y_BC0T_OP 275
  20. # define Y_BC1F_OP 276
  21. # define Y_BC1T_OP 277
  22. # define Y_BC2F_OP 278
  23. # define Y_BC2T_OP 279
  24. # define Y_BC3F_OP 280
  25. # define Y_BC3T_OP 281
  26. # define Y_BEQ_OP 282
  27. # define Y_BGEZAL_OP 283
  28. # define Y_BGEZ_OP 284
  29. # define Y_BGTZ_OP 285
  30. # define Y_BLEZ_OP 286
  31. # define Y_BLTZAL_OP 287
  32. # define Y_BLTZ_OP 288
  33. # define Y_BNE_OP 289
  34. # define Y_BREAK_OP 290
  35. # define Y_CFC0_OP 291
  36. # define Y_CFC1_OP 292
  37. # define Y_CFC2_OP 293
  38. # define Y_CFC3_OP 294
  39. # define Y_COP0_OP 295
  40. # define Y_COP1_OP 296
  41. # define Y_COP2_OP 297
  42. # define Y_COP3_OP 298
  43. # define Y_CTC0_OP 299
  44. # define Y_CTC1_OP 300
  45. # define Y_CTC2_OP 301
  46. # define Y_CTC3_OP 302
  47. # define Y_CVT_D_S_OP 303
  48. # define Y_CVT_D_W_OP 304
  49. # define Y_CVT_S_D_OP 305
  50. # define Y_CVT_S_W_OP 306
  51. # define Y_CVT_W_D_OP 307
  52. # define Y_CVT_W_S_OP 308
  53. # define Y_C_EQ_D_OP 309
  54. # define Y_C_EQ_S_OP 310
  55. # define Y_C_F_D_OP 311
  56. # define Y_C_F_S_OP 312
  57. # define Y_C_LE_D_OP 313
  58. # define Y_C_LE_S_OP 314
  59. # define Y_C_LT_D_OP 315
  60. # define Y_C_LT_S_OP 316
  61. # define Y_C_NGE_D_OP 317
  62. # define Y_C_NGE_S_OP 318
  63. # define Y_C_NGLE_D_OP 319
  64. # define Y_C_NGLE_S_OP 320
  65. # define Y_C_NGL_D_OP 321
  66. # define Y_C_NGL_S_OP 322
  67. # define Y_C_NGT_D_OP 323
  68. # define Y_C_NGT_S_OP 324
  69. # define Y_C_OLE_D_OP 325
  70. # define Y_C_OLE_S_OP 326
  71. # define Y_C_SEQ_D_OP 327
  72. # define Y_C_SEQ_S_OP 328
  73. # define Y_C_SF_D_OP 329
  74. # define Y_C_SF_S_OP 330
  75. # define Y_C_UEQ_D_OP 331
  76. # define Y_C_UEQ_S_OP 332
  77. # define Y_C_ULE_D_OP 333
  78. # define Y_C_ULE_S_OP 334
  79. # define Y_C_UN_D_OP 335
  80. # define Y_C_UN_S_OP 336
  81. # define Y_DIVU_OP 337
  82. # define Y_DIV_D_OP 338
  83. # define Y_DIV_OP 339
  84. # define Y_DIV_S_OP 340
  85. # define Y_JALR_OP 341
  86. # define Y_JAL_OP 342
  87. # define Y_JR_OP 343
  88. # define Y_J_OP 344
  89. # define Y_LBU_OP 345
  90. # define Y_LB_OP 346
  91. # define Y_LHU_OP 347
  92. # define Y_LH_OP 348
  93. # define Y_LUI_OP 349
  94. # define Y_LWC0_OP 350
  95. # define Y_LWC1_OP 351
  96. # define Y_LWC2_OP 352
  97. # define Y_LWC3_OP 353
  98. # define Y_LWL_OP 354
  99. # define Y_LWR_OP 355
  100. # define Y_LW_OP 356
  101. # define Y_MFC0_OP 357
  102. # define Y_MFC1_OP 358
  103. # define Y_MFC2_OP 359
  104. # define Y_MFC3_OP 360
  105. # define Y_MFHI_OP 361
  106. # define Y_MFLO_OP 362
  107. # define Y_MOV_D_OP 363
  108. # define Y_MOV_S_OP 364
  109. # define Y_MTC0_OP 365
  110. # define Y_MTC1_OP 366
  111. # define Y_MTC2_OP 367
  112. # define Y_MTC3_OP 368
  113. # define Y_MTHI_OP 369
  114. # define Y_MTLO_OP 370
  115. # define Y_MULTU_OP 371
  116. # define Y_MULT_OP 372
  117. # define Y_MUL_D_OP 373
  118. # define Y_MUL_S_OP 374
  119. # define Y_NEG_D_OP 375
  120. # define Y_NEG_S_OP 376
  121. # define Y_NOR_OP 377
  122. # define Y_ORI_OP 378
  123. # define Y_OR_OP 379
  124. # define Y_PFW_OP 380
  125. # define Y_RFE_OP 381
  126. # define Y_SB_OP 382
  127. # define Y_SH_OP 383
  128. # define Y_SLLV_OP 384
  129. # define Y_SLL_OP 385
  130. # define Y_SLTIU_OP 386
  131. # define Y_SLTI_OP 387
  132. # define Y_SLTU_OP 388
  133. # define Y_SLT_OP 389
  134. # define Y_SRAV_OP 390
  135. # define Y_SRA_OP 391
  136. # define Y_SRLV_OP 392
  137. # define Y_SRL_OP 393
  138. # define Y_SUBU_OP 394
  139. # define Y_SUB_D_OP 395
  140. # define Y_SUB_OP 396
  141. # define Y_SUB_S_OP 397
  142. # define Y_SWC0_OP 398
  143. # define Y_SWC1_OP 399
  144. # define Y_SWC2_OP 400
  145. # define Y_SWC3_OP 401
  146. # define Y_SWL_OP 402
  147. # define Y_SWR_OP 403
  148. # define Y_SW_OP 404
  149. # define Y_SYSCALL_OP 405
  150. # define Y_TLBP_OP 406
  151. # define Y_TLBR_OP 407
  152. # define Y_TLBWI_OP 408
  153. # define Y_TLBWR_OP 409
  154. # define Y_XORI_OP 410
  155. # define Y_XOR_OP 411
  156. # define Y_ABS_POP 412
  157. # define Y_BAL_POP 413
  158. # define Y_BEQZ_POP 414
  159. # define Y_BGEU_POP 415
  160. # define Y_BGE_POP 416
  161. # define Y_BGTU_POP 417
  162. # define Y_BGT_POP 418
  163. # define Y_BLEU_POP 419
  164. # define Y_BLE_POP 420
  165. # define Y_BLTU_POP 421
  166. # define Y_BLT_POP 422
  167. # define Y_BNEZ_POP 423
  168. # define Y_B_POP 424
  169. # define Y_LA_POP 425
  170. # define Y_LD_POP 426
  171. # define Y_LI_POP 427
  172. # define Y_LI_D_POP 428
  173. # define Y_LI_S_POP 429
  174. # define Y_L_D_POP 430
  175. # define Y_L_S_POP 431
  176. # define Y_MFC1_D_POP 432
  177. # define Y_MTC1_D_POP 433
  178. # define Y_MOVE_POP 434
  179. # define Y_MULOU_POP 435
  180. # define Y_MULO_POP 436
  181. # define Y_MUL_POP 437
  182. # define Y_NEGU_POP 438
  183. # define Y_NEG_POP 439
  184. # define Y_NOP_POP 440
  185. # define Y_NOT_POP 441
  186. # define Y_REMU_POP 442
  187. # define Y_REM_POP 443
  188. # define Y_ROL_POP 444
  189. # define Y_ROR_POP 445
  190. # define Y_SD_POP 446
  191. # define Y_SEQ_POP 447
  192. # define Y_SGEU_POP 448
  193. # define Y_SGE_POP 449
  194. # define Y_SGTU_POP 450
  195. # define Y_SGT_POP 451
  196. # define Y_SLEU_POP 452
  197. # define Y_SLE_POP 453
  198. # define Y_SNE_POP 454
  199. # define Y_S_D_POP 455
  200. # define Y_S_S_POP 456
  201. # define Y_ULHU_POP 457
  202. # define Y_ULH_POP 458
  203. # define Y_ULW_POP 459
  204. # define Y_USH_POP 460
  205. # define Y_USW_POP 461
  206. # define Y_ALIAS_DIR 462
  207. # define Y_ALIGN_DIR 463
  208. # define Y_ASCII_DIR 464
  209. # define Y_ASCIIZ_DIR 465
  210. # define Y_ASM0_DIR 466
  211. # define Y_BGNB_DIR 467
  212. # define Y_BYTE_DIR 468
  213. # define Y_COMM_DIR 469
  214. # define Y_DATA_DIR 470
  215. # define Y_DOUBLE_DIR 471
  216. # define Y_ENDB_DIR 472
  217. # define Y_ENDR_DIR 473
  218. # define Y_END_DIR 474
  219. # define Y_ENT_DIR 475
  220. # define Y_ERR_DIR 476
  221. # define Y_EXTERN_DIR 477
  222. # define Y_FILE_DIR 478
  223. # define Y_FLOAT_DIR 479
  224. # define Y_FMASK_DIR 480
  225. # define Y_FRAME_DIR 481
  226. # define Y_GLOBAL_DIR 482
  227. # define Y_HALF_DIR 483
  228. # define Y_K_TEXT_DIR 484
  229. # define Y_K_DATA_DIR 485
  230. # define Y_LABEL_DIR 486
  231. # define Y_LCOMM_DIR 487
  232. # define Y_LIVEREG_DIR 488
  233. # define Y_LOC_DIR 489
  234. # define Y_MASK_DIR 490
  235. # define Y_NOALIAS_DIR 491
  236. # define Y_OPTIONS_DIR 492
  237. # define Y_RDATA_DIR 493
  238. # define Y_REPEAT_DIR 494
  239. # define Y_SDATA_DIR 495
  240. # define Y_SET_DIR 496
  241. # define Y_SPACE_DIR 497
  242. # define Y_STRUCT_DIR 498
  243. # define Y_TEXT_DIR 499
  244. # define Y_VERSTAMP_DIR 500
  245. # define Y_VREG_DIR 501
  246. # define Y_WORD_DIR 502
  247.  
  248. # line 287 "parser.y"
  249. #include <stdio.h>
  250.  
  251. #include "spim.h"
  252. #include "spim-utils.h"
  253. #include "inst.h"
  254. #include "mem.h"
  255. #include "reg.h"
  256. #include "sym-tbl.h"
  257. #include "data.h"
  258. #include "scanner.h"
  259. #include "parser.h"
  260.  
  261.  
  262. /* return (0) */
  263. #define LINE_PARSE_DONE YYACCEPT
  264.  
  265. /* return (1) */
  266. #define FILE_PARSE_DONE YYABORT
  267.  
  268. typedef struct ll
  269. {
  270.   label *head;
  271.   struct ll *tail;
  272. } label_list;
  273.  
  274.  
  275. /* Exported Variables: */
  276.  
  277. int data_dir;            /* Non-zero means item in data segment */
  278.  
  279. int text_dir;            /* Non-zero means item in text segment */
  280.  
  281.  
  282. /* Local functions: */
  283.  
  284. #ifdef __STDC__
  285. static imm_expr *branch_offset (int n_inst);
  286. static void clear_labels (void);
  287. static label_list *cons_label (label *head, label_list *tail);
  288. static void div_inst (int op, int rd, int rs, int rt, int const_divisor);
  289. static void mult_inst (int op, int rd, int rs, int rt);
  290. static void nop_inst (void);
  291. static void set_eq_inst (int op, int rd, int rs, int rt);
  292. static void set_ge_inst (int op, int rd, int rs, int rt);
  293. static void set_gt_inst (int op, int rd, int rs, int rt);
  294. static void set_le_inst (int op, int rd, int rs, int rt);
  295. static void store_word_data (int value);
  296. static void trap_inst (void);
  297. #else
  298. static imm_expr *branch_offset ();
  299. static void clear_labels ();
  300. static label_list *cons_label ();
  301. static void div_inst ();
  302. static void mult_inst ();
  303. static void nop_inst ();
  304. static void set_eq_inst ();
  305. static void set_ge_inst ();
  306. static void set_gt_inst ();
  307. static void set_le_inst ();
  308. static void store_word_data ();
  309. static void trap_inst ();
  310. #endif
  311.  
  312.  
  313. /* Local variables: */
  314.  
  315. static int null_term;        /* Non-zero means string terminate by \0 */
  316.  
  317. static void (*store_op) ();    /* Function to store items in an EXPR_LST */
  318.  
  319. static label_list *this_line_labels = NULL; /* List of label for curent line */
  320.  
  321. static int noat_flag = 0;    /* Non-zero means program can use $1 */
  322.  
  323. static char *input_file_name;    /* Name of file being parsed */
  324.  
  325.  
  326. #define yyclearin yychar = -1
  327. #define yyerrok yyerrflag = 0
  328. extern int yychar;
  329. extern short yyerrflag;
  330. #ifndef YYMAXDEPTH
  331. #define YYMAXDEPTH 150
  332. #endif
  333. #ifndef YYSTYPE
  334. #define YYSTYPE int
  335. #endif
  336. YYSTYPE yylval, yyval;
  337. # define YYERRCODE 256
  338.  
  339. # line 2014 "parser.y"
  340.  
  341.  
  342. /* Maintain and update the address of labels for the current line. */
  343.  
  344. #ifdef __STDC__
  345. void
  346. fix_current_label_address (mem_addr new_addr)
  347. #else
  348. void
  349. fix_current_label_address (new_addr)
  350.      mem_addr new_addr;
  351. #endif
  352. {
  353.   label_list *l;
  354.  
  355.   for (l = this_line_labels; l != NULL; l = l->tail)
  356.     l->head->addr = new_addr;
  357.   clear_labels ();
  358. }
  359.  
  360.  
  361. #ifdef __STDC__
  362. static label_list *
  363. cons_label (label *head, label_list *tail)
  364. #else
  365. static label_list *
  366. cons_label (head, tail)
  367.      label *head;
  368.      label_list *tail;
  369. #endif
  370. {
  371.   label_list *c = (label_list *) malloc (sizeof (label_list));
  372.  
  373.   c->head = head;
  374.   c->tail = tail;
  375.   return (c);
  376. }
  377.  
  378.  
  379. #ifdef __STDC__
  380. static void
  381. clear_labels (void)
  382. #else
  383. static void
  384. clear_labels ()
  385. #endif
  386. {
  387.   label_list *n;
  388.  
  389.   for ( ; this_line_labels != NULL; this_line_labels = n)
  390.     {
  391.       n = this_line_labels->tail;
  392.       free (this_line_labels);
  393.     }
  394. }
  395.  
  396.  
  397. /* Operations on op codes. */
  398.  
  399. #ifdef __STDC__
  400. int
  401. op_to_imm_op (int opcode)
  402. #else
  403. int
  404. op_to_imm_op (opcode)
  405.      int opcode;
  406. #endif
  407. {
  408.   switch (opcode)
  409.     {
  410.     case Y_ADD_OP: return (Y_ADDI_OP);
  411.     case Y_ADDU_OP: return (Y_ADDIU_OP);
  412.     case Y_AND_OP: return (Y_ANDI_OP);
  413.     case Y_OR_OP: return (Y_ORI_OP);
  414.     case Y_XOR_OP: return (Y_XORI_OP);
  415.     case Y_SLT_OP: return (Y_SLTI_OP);
  416.     case Y_SLTU_OP: return (Y_SLTIU_OP);
  417.     case Y_SLLV_OP: return (Y_SLL_OP);
  418.     case Y_SRAV_OP: return (Y_SRA_OP);
  419.     case Y_SRLV_OP: return (Y_SRL_OP);
  420.     default: fatal_error ("Can't convert op to immediate op\n"); return (0);
  421.     }
  422. }
  423.  
  424.  
  425. #ifdef __STDC__
  426. int
  427. imm_op_to_op (int opcode)
  428. #else
  429. int
  430. imm_op_to_op (opcode)
  431.      int opcode;
  432. #endif
  433. {
  434.   switch (opcode)
  435.     {
  436.     case Y_ADDI_OP: return (Y_ADD_OP);
  437.     case Y_ADDIU_OP: return (Y_ADDU_OP);
  438.     case Y_ANDI_OP: return (Y_AND_OP);
  439.     case Y_ORI_OP: return (Y_OR_OP);
  440.     case Y_XORI_OP: return (Y_XOR_OP);
  441.     case Y_SLTI_OP: return (Y_SLT_OP);
  442.     case Y_SLTIU_OP: return (Y_SLTU_OP);
  443.     case Y_J_OP: return (Y_JR_OP);
  444.     case Y_LUI_OP: return (Y_ADDU_OP);
  445.     case Y_SLL_OP: return (Y_SLLV_OP);
  446.     case Y_SRA_OP: return (Y_SRAV_OP);
  447.     case Y_SRL_OP: return (Y_SRLV_OP);
  448.     default: fatal_error ("Can't convert immediate op to op\n"); return (0);
  449.     }
  450. }
  451.  
  452.  
  453. #ifdef __STDC__
  454. static void
  455. nop_inst (void)
  456. #else
  457. static void
  458. nop_inst ()
  459. #endif
  460. {
  461.   r_type_inst (Y_OR_OP, 0, 0, 0);
  462. }
  463.  
  464.  
  465. #ifdef __STDC__
  466. static void
  467. trap_inst (void)
  468. #else
  469. static void
  470. trap_inst ()
  471. #endif
  472. {
  473.   r_type_inst (Y_BREAK_OP, 0, 0, 0);
  474. }
  475.  
  476.  
  477. #ifdef __STDC__
  478. static imm_expr *
  479. branch_offset (int n_inst)
  480. #else
  481. static imm_expr *
  482. branch_offset (n_inst)
  483.      int n_inst;
  484. #endif
  485. {
  486.   return (const_imm_expr (n_inst << 2)); /* Later shifted right 2 places */
  487. }
  488.  
  489.  
  490. #ifdef __STDC__
  491. static void
  492. div_inst (int op, int rd, int rs, int rt, int const_divisor)
  493. #else
  494. static void
  495. div_inst (op, rd, rs, rt, const_divisor)
  496.      int op, rd, rs, rt, const_divisor;
  497. #endif
  498. {
  499.   if (rd != 0 && !const_divisor)
  500.     {
  501.       i_type_inst_free (Y_BNE_OP, 0, rt, branch_offset (2));
  502.       trap_inst ();
  503.     }
  504.   if (op == Y_DIV_OP || op == Y_REM_POP)
  505.     r_type_inst (Y_DIV_OP, 0, rs, rt);
  506.   else
  507.     r_type_inst (Y_DIVU_OP, 0, rs, rt);
  508.   if (rd != 0)
  509.     {
  510.       if (op == Y_DIV_OP || op == Y_DIVU_OP)
  511.     r_type_inst (Y_MFLO_OP, rd, 0, 0);
  512.       else
  513.     r_type_inst (Y_MFHI_OP, rd, 0, 0);
  514.     }
  515. }
  516.  
  517.  
  518. #ifdef __STDC__
  519. static void
  520. mult_inst (int op, int rd, int rs, int rt)
  521. #else
  522. static void
  523. mult_inst (op, rd, rs, rt)
  524.      int op, rd, rs, rt;
  525. #endif
  526. {
  527.   if (op == Y_MULOU_POP)
  528.     r_type_inst (Y_MULTU_OP, 0, rs, rt);
  529.   else
  530.     r_type_inst (Y_MULT_OP, 0, rs, rt);
  531.   if (op == Y_MULOU_POP && rd != 0)
  532.     {
  533.       r_type_inst (Y_MFHI_OP, 1, 0, 0);    /* Use $at */
  534.       i_type_inst_free (Y_BEQ_OP, 0, 1, branch_offset (2));
  535.       trap_inst ();
  536.     }
  537.   else if (op == Y_MULO_POP && rd != 0)
  538.     {
  539.       r_type_inst (Y_MFHI_OP, 1, 0, 0); /* use $at */
  540.       r_type_inst (Y_MFLO_OP, rd, 0, 0);
  541.       r_sh_type_inst (Y_SRA_OP, rd, rd, 31);
  542.       i_type_inst_free (Y_BEQ_OP, rd, 1, branch_offset (2));
  543.       trap_inst ();
  544.     }
  545.   if (rd != 0)
  546.     r_type_inst (Y_MFLO_OP, rd, 0, 0);
  547. }
  548.  
  549.  
  550. #ifdef __STDC__
  551. static void
  552. set_le_inst (int op, int rd, int rs, int rt)
  553. #else
  554. static void
  555. set_le_inst (op, rd, rs, rt)
  556.      int op, rd, rs, rt;
  557. #endif
  558. {
  559.   i_type_inst_free (Y_BNE_OP, rs, rt, branch_offset (3));
  560.   i_type_inst_free (Y_ORI_OP, rd, 0, const_imm_expr (1));
  561.   i_type_inst_free (Y_BEQ_OP, 0, 0, branch_offset (2));
  562.   r_type_inst ((op == Y_SLE_POP ? Y_SLT_OP : Y_SLTU_OP), rd, rs, rt);
  563. }
  564.  
  565.  
  566. #ifdef __STDC__
  567. static void
  568. set_gt_inst (int op, int rd, int rs, int rt)
  569. #else
  570. static void
  571. set_gt_inst (op, rd, rs, rt)
  572.      int op, rd, rs, rt;
  573. #endif
  574. {
  575.   r_type_inst (op == Y_SGT_POP ? Y_SLT_OP : Y_SLTU_OP, rd, rt, rs);
  576. }
  577.  
  578.  
  579. #ifdef __STDC__
  580. static void
  581. set_ge_inst (int op, int rd, int rs, int rt)
  582. #else
  583. static void
  584. set_ge_inst (op, rd, rs, rt)
  585.      int op, rd, rs, rt;
  586. #endif
  587. {
  588.   i_type_inst_free (Y_BNE_OP, rs, rt, branch_offset (3));
  589.   i_type_inst_free (Y_ORI_OP, rd, 0, const_imm_expr (1));
  590.   i_type_inst_free (Y_BEQ_OP, 0, 0, branch_offset (2));
  591.   r_type_inst (op == Y_SGE_POP ? Y_SLT_OP : Y_SLTU_OP, rd, rt, rs);
  592. }
  593.  
  594.  
  595. #ifdef __STDC__
  596. static void
  597. set_eq_inst (int op, int rd, int rs, int rt)
  598. #else
  599. static void
  600. set_eq_inst (op, rd, rs, rt)
  601.      int op, rd, rs, rt;
  602. #endif
  603. {
  604.   imm_expr *if_eq, *if_neq;
  605.  
  606.   if (op == Y_SEQ_POP)
  607.     if_eq = const_imm_expr (1), if_neq = const_imm_expr (0);
  608.   else
  609.     if_eq = const_imm_expr (0), if_neq = const_imm_expr (1);
  610.  
  611.   i_type_inst_free (Y_BEQ_OP, rs, rt, branch_offset (3));
  612.   /* RD <- 0 (if not equal) */
  613.   i_type_inst_free (Y_ORI_OP, rd, 0, if_neq);
  614.   i_type_inst_free (Y_BEQ_OP, 0, 0, branch_offset (2)); /* Branch always */
  615.   /* RD <- 1 */
  616.   i_type_inst_free (Y_ORI_OP, rd, 0, if_eq);
  617. }
  618.  
  619.  
  620. /* Store the value either as a datum or instruction. */
  621.  
  622. #ifdef __STDC__
  623. static void
  624. store_word_data (int value)
  625. #else
  626. static void
  627. store_word_data (value)
  628.      int value;
  629. #endif
  630. {
  631.   if (data_dir)
  632.     store_word (value);
  633.   else if (text_dir)
  634.     store_instruction (inst_decode (value));
  635. }
  636.  
  637.  
  638.  
  639. #ifdef __STDC__
  640. void
  641. initialize_parser (char *file_name)
  642. #else
  643. void
  644. initialize_parser (file_name)
  645.      char *file_name;
  646. #endif
  647. {
  648.   input_file_name = file_name;
  649.   only_id = 0;
  650.   data_dir = 0;
  651.   text_dir = 1;
  652. }
  653.  
  654.  
  655. #ifdef __STDC__
  656. void
  657. yyerror (char *s)
  658. #else
  659. void
  660. yyerror (s)
  661.      char *s;
  662. #endif
  663. {
  664.   error ("spim: (parser) %s on line %d of file %s\n",
  665.      s, line_no, input_file_name);
  666.   print_erroneous_line ();
  667. }
  668. short yyexca[] ={
  669. -1, 1,
  670.     0, -1,
  671.     -2, 0,
  672. -1, 2,
  673.     259, 376,
  674.     -2, 5,
  675. -1, 345,
  676.     260, 348,
  677.     -2, 346,
  678. -1, 371,
  679.     259, 376,
  680.     -2, 375,
  681. -1, 475,
  682.     257, 277,
  683.     -2, 363,
  684. -1, 489,
  685.     257, 299,
  686.     -2, 363,
  687. -1, 497,
  688.     257, 322,
  689.     -2, 363,
  690.     };
  691. # define YYNPROD 378
  692. # define YYLAST 869
  693. short yyact[]={
  694.  
  695.    9, 404, 476, 466, 472, 475, 479, 238, 237, 152,
  696.  151, 142, 240, 141, 239, 153, 143, 185, 181, 186,
  697.  182, 187, 183, 188, 184, 197, 190, 189, 191, 192,
  698.  194, 193, 198,  26, 229, 230, 231, 232, 471, 551,
  699.  480, 412, 233, 234, 235, 236, 247, 248, 249, 250,
  700.  251, 252, 271, 257, 269, 255, 281, 267, 279, 265,
  701.  280, 266, 276, 262, 278, 264, 282, 268, 273, 259,
  702.  277, 263, 275, 261, 272, 258, 274, 260, 270, 256,
  703.  165, 242, 164, 241, 210, 209, 208, 207, 110, 109,
  704.  112, 111, 121, 118, 124, 119, 120, 114, 115, 113,
  705.  219, 220, 222, 223, 215, 216, 214, 213, 224, 225,
  706.  227, 228, 217, 218, 172, 171, 244, 243, 254, 253,
  707.  161, 154, 145, 117, 139, 127, 128, 148, 158, 157,
  708.  156, 147, 146, 149, 159, 150, 160, 163, 246, 162,
  709.  245, 133, 136, 134, 135, 130, 131, 129, 140, 450,
  710.  400, 359, 405, 155, 144,  28, 212, 195, 202, 201,
  711.  200, 199, 206, 205, 204, 203, 196, 211,  13, 116,
  712.   14,  15,  16, 126, 125, 221, 226,  32, 170, 169,
  713.  168,  30,  29,  27,  31, 167, 166,  43,  42, 132,
  714.  179, 178, 177, 176, 175, 174, 173, 180, 138, 137,
  715.  123, 122,  17,  23,  22,  68,  69,  70,  71,  72,
  716.   73,  74,  75,  76,  78,  80,  81,  79,  82,  84,
  717.   83,  85,  86,  87,  88,  89,  90, 105,  77,  91,
  718.   92,  93,  94,  95,  96,  97,  99,  98, 100, 101,
  719.  102, 103, 104, 106, 107, 108, 326, 411, 298, 473,
  720.  388, 485, 299, 406, 392, 393,   4, 289, 309, 289,
  721.  289, 289, 292, 293, 289, 289, 405, 305, 499, 305,
  722.  305, 290, 512, 310, 290, 289, 289, 289, 289, 289,
  723.  289, 289, 289, 289, 289, 289, 289, 289, 494, 289,
  724.  289, 289, 289, 289, 289, 510, 429, 290, 290, 470,
  725.  386, 333, 334, 345, 358, 505, 349, 349, 349, 285,
  726.  334, 334, 580, 408, 565, 564, 310, 291, 563, 553,
  727.  360, 496, 495, 361, 493, 492, 357, 491, 488, 366,
  728.  487, 483, 399, 396, 395, 378, 373, 374, 403, 306,
  729.  394, 390, 389, 379, 385, 381, 382, 384, 383, 377,
  730.  375, 387, 361, 372, 397, 391, 361, 361, 342, 346,
  731.  468, 469, 368, 367, 364, 311, 287, 286, 297, 348,
  732.  408, 407, 290, 577, 572, 283, 347, 549, 284, 288,
  733.  352, 547, 439, 486, 557, 300, 489, 558, 303, 559,
  734.  582, 581, 294, 295, 296, 574, 573, 301, 302, 503,
  735.  566, 504, 474, 500, 497, 560, 576, 502, 312, 313,
  736.  314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
  737.  324, 575, 327, 328, 329, 330, 331, 332,   5, 481,
  738.  350, 351, 353, 354, 355, 356, 555, 371, 304, 556,
  739.  477, 451, 402, 498, 401, 398, 409, 380, 376, 370,
  740.  369, 365, 413, 414, 415, 416, 363, 417, 418, 419,
  741.  420, 307, 308, 362,  67,  66,  65,  64,  63, 545,
  742.   62,  61,  60,  59,  58,  57, 546, 344, 548, 546,
  743.   56,  55,  54,  53, 408, 407, 408, 501, 453, 455,
  744.  457, 459, 548,  52,  51,  50,  49,  48,  47,  46,
  745.  548,  45,  44,  41,  40, 561, 562,  39,  38,  37,
  746.   36,  35,  34,  33,  25,  24,  21,  20, 478,  19,
  747.  506,  18,  12, 325,  11,  10, 484,   8,   7,   6,
  748.    3,   2,   1,   0, 490,   0,   0,   0,   0,   0,
  749.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  750.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  751.  570, 571,   0,   0,   0,   0,   0,   0,   0,   0,
  752.    0,   0, 440, 335, 336, 337, 338, 339, 340, 341,
  753.  343,   0,   0,   0, 440, 440, 440, 440, 440, 334,
  754.  334,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  755.    0,   0, 310, 310, 467, 467, 467,   0,   0,   0,
  756.    0,   0, 464, 465,   0,   0,   0,   0,   0,   0,
  757.  361,   0,   0,   0,   0, 482,   0,   0, 361, 550,
  758.    0,   0,   0,   0,   0, 410, 361, 447, 448,   0,
  759.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  760.    0,   0,   0,   0,   0,   0, 427,   0, 431,   0,
  761.  434, 436,   0,   0,   0, 461,   0,   0,   0, 462,
  762.  463,   0,   0, 440,   0, 440,   0,   0,   0, 440,
  763.  440,   0, 440,   0, 440, 440,   0,   0, 440, 440,
  764.  440, 440, 440, 440,   0,   0,   0,   0,   0,   0,
  765.    0,   0,   0, 334, 334,   0, 334, 334, 334, 334,
  766.  334, 334, 334, 334, 467,   0,   0,   0,   0,   0,
  767.  449, 452, 454, 456, 458,   0,   0,   0,   0,   0,
  768.    0, 361,   0,   0,   0, 552,   0,   0,   0,   0,
  769.    0,   0,   0,   0,   0,   0, 554,   0,   0,   0,
  770.    0, 534, 535,   0, 537, 538, 539, 540, 541, 542,
  771.  543, 544,   0,   0,   0, 508,   0,   0,   0, 511,
  772.    0,   0, 515,   0, 517,   0, 519, 521,   0,   0,
  773.  523, 525, 527, 529, 531, 533,   0,   0,   0,   0,
  774.  536,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  775.    0,   0, 567,   0, 569,   0,   0,   0,   0, 507,
  776.  568, 509,   0,   0,   0, 513, 514,   0, 516,   0,
  777.  518, 520, 578, 579, 522, 524, 526, 528, 530, 532,
  778.    0,   0,   0,   0,   0,   0, 421, 422, 423, 424,
  779.  425, 426, 428, 430, 432, 433, 435, 437, 438,   0,
  780.    0, 441, 442, 443, 444, 445, 446,   0,   0,   0,
  781.    0,   0,   0,   0,   0,   0,   0,   0, 460 };
  782. short yypact[]={
  783.  
  784. -1000,-1000,-1000,-257, 317,  50,-1000, 110, 109,-1000,
  785.   11,   2,  11,  11,  11,  -9,  -9,  11,  11,  -9,
  786.   11,   2,  11,  11,  -9,-1000, 107,-1000,  11,  11,
  787.   11,  11,  11,  11,  11,  11,  11,  11,  11,  11,
  788.   11,  11,  11,  11,  11,  11,  11,  11,-1000,  11,
  789.   11,  11,  11,  11,  11,  11,  11,-1000,   2,  11,
  790.   11,  11,   2,  -9,  -9,  -9,  -9,  -9,  44,  62,
  791. -1000,-1000,-1000, 106,-1000,-1000, 105, 104,-1000,-1000,
  792.   95,-1000,-1000,-1000,-1000,  92,-1000,  91,  11,-1000,
  793. -1000,-1000,-1000,  90,  89,  86,  40,-1000,  62,  84,
  794.   83,-1000,  62,  62,  82,  76,  75,  11,-1000,-1000,
  795. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  796. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  797. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  798. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  799. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  800. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  801. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  802. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  803. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  804. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  805. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  806. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  807. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  808. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  809. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  810. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  811. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  812. -1000,-1000,-1000,-1000,  74,-1000,-1000,-1000,-1000,-1000,
  813. -1000,-1000,-1000,-1000, 226,-1000, 226, -16,-1000,-1000,
  814. -222,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  815. -1000,-1000,  11,  11,  11,  11,  11, 112,  38, 112,
  816.   11, 112, 112,  11,  11,  11,-1000,  11,  11,  11,
  817.   11,  11,  11,-1000,-1000,-1000,-1000,  11,  11,  11,
  818.   11,  11,-1000,-1000,  11,-1000,-1000,   2,-1000,-1000,
  819. -1000,   2,   2,  -9,  -9,  -9,  -9,  -9,  39,-1000,
  820. -1000,-1000, -13, -13,-1000,-1000,  62,-1000,-1000,-223,
  821. -1000,-1000,-1000,  73,  62, -11,-223,  72,  70,-1000,
  822. -1000,-1000,  62,  69,  67,  66,  28,-1000,-1000,-1000,
  823. -1000,-1000,-1000,-1000,-1000,-1000,  64,  63,-1000,-1000,
  824. -1000, 228,-1000,-1000,-1000,  55,-1000, 356, 262,-1000,
  825. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  826. -1000,-1000,-1000,-1000,-1000,-1000, 112,-1000,  37,-1000,
  827.  226,-1000,  14, 112,-1000, 112,-1000, 112, 112,-1000,
  828. -1000, 112, 112, 112, 112, 112, 112,-1000,-1000,-1000,
  829. -1000, 226,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  830. -1000,-1000,-1000,-1000,-1000,  -9,-1000,-1000,-1000,-1000,
  831. -1000, -13,-1000, 323, -13,-1000, 319,  62,-1000,-224,
  832. -1000,-1000,-1000,-1000,-1000,-1000,-224,-1000,  11,-1000,
  833. -1000,-1000,-1000,-1000,-1000,-1000,  61,-1000,-1000,  11,
  834.  396, 344, 364,  55,  55,  60,-1000,-1000,-1000,-1000,
  835. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  836. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  837. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  838. -1000,-1000,-1000,-1000,-1000,-1000,-1000,  57,-1000,  56,
  839. -1000,-1000,-1000,-1000, 359,  11,-1000,  11,  55,  55,
  840.  312,-1000,-1000,-1000,-1000,-1000,-1000, 355,-1000, 354,
  841.  381, 366, 311,-1000,-1000,  11,  11,  54, 350, 349,
  842. -1000,-1000,-1000 };
  843. short yypgo[]={
  844.  
  845.    0, 532, 531, 530, 529, 253, 528, 527, 525, 379,
  846.  150, 524, 317, 522, 338, 368, 521, 519, 517, 438,
  847.  516, 515, 258, 514, 523, 513, 382, 512, 511, 510,
  848.  509, 508, 507, 504, 503, 502, 501, 499, 498, 497,
  849.  301, 496, 495, 494, 149, 493, 483, 482, 481, 480,
  850.  477, 475, 474, 473, 369, 472, 471, 470, 468, 467,
  851.    3, 466, 465, 464, 151, 463,  38, 456, 451,   5,
  852.  450,   6, 449, 448, 246, 447, 445, 444, 443,   1,
  853.  441, 248,   4,   2, 440, 437, 429, 428 };
  854. short yyr1[]={
  855.  
  856.    0,   2,   1,   3,   3,   3,   4,   4,   4,   4,
  857.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  858.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  859.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  860.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  861.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  862.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  863.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  864.    6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
  865.    6,   6,   6,   6,   8,   8,   8,   8,   8,   8,
  866.    8,   8,   8,  11,  11,  11,  13,  16,  16,  17,
  867.   17,  17,  18,  18,  18,  18,  18,  18,  20,  20,
  868.   20,  21,  21,  21,  23,  23,  25,  25,  25,  25,
  869.   25,  25,  25,  27,  27,  27,  28,  28,  28,  28,
  870.   28,  28,  28,  29,  29,  29,  30,  31,  31,  32,
  871.   32,  32,  32,  33,  33,  33,  35,  35,  36,  36,
  872.   37,  37,  38,  38,  34,  34,  39,  39,  39,  39,
  873.   39,  39,  39,  39,  41,  41,  41,  41,  41,  41,
  874.   42,  42,  43,  43,  45,  45,  46,  46,  47,  47,
  875.   48,  48,  49,  49,  49,  49,  51,  51,  52,  52,
  876.   53,  53,  55,  55,  56,  56,  56,  56,  56,  56,
  877.   56,  56,  56,  56,  57,  57,  57,  57,  57,  57,
  878.   57,  57,  58,  58,  59,  59,  59,  59,  59,  59,
  879.   59,  59,  61,  61,  61,  61,  61,  61,  62,  62,
  880.   63,  63,  63,  63,  63,  63,  63,  63,  63,  63,
  881.   63,  63,  63,  63,  63,  63,  63,  63,  63,  63,
  882.   63,  63,  63,  63,  63,  63,  63,  63,   7,   7,
  883.   65,   7,  67,   7,   7,   7,  68,   7,   7,   7,
  884.    7,   7,   7,  70,   7,   7,   7,   7,   7,   7,
  885.    7,   7,   7,  73,   7,   7,   7,   7,  75,   7,
  886.    7,   7,   7,   7,   7,   7,   7,   7,   7,   7,
  887.    7,   7,   7,   7,   7,   7,   7,   7,   7,   7,
  888.    7,  76,   7,  77,  10,  78,  78,  78,  78,  78,
  889.   78,  78,  78,  78,  78,  80,  44,  14,  14,  14,
  890.   14,  14,  79,  79,  79,   9,  24,  26,  50,  54,
  891.   19,  74,  15,  22,  60,  81,  12,  12,  40,  66,
  892.   66,  82,  82,  84,  83,  64,  64,  69,  69,  69,
  893.   71,  71,  85,  72,  86,  86,  87,   5 };
  894. short yyr2[]={
  895.  
  896.    0,   0,   3,   2,   3,   0,   2,   2,   1,   0,
  897.    3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
  898.    3,   3,   3,   3,   3,   1,   2,   1,   3,   3,
  899.    3,   3,   3,   4,   4,   3,   4,   4,   3,   4,
  900.    3,   4,   4,   4,   4,   3,   4,   4,   3,   3,
  901.    4,   4,   4,   4,   3,   4,   4,   4,   4,   4,
  902.    4,   4,   4,   4,   4,   4,   4,   2,   3,   3,
  903.    4,   4,   4,   4,   4,   4,   4,   4,   4,   4,
  904.    2,   2,   3,   2,   3,   2,   2,   3,   3,   3,
  905.    4,   3,   3,   3,   1,   1,   1,   1,   1,   1,
  906.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  907.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  908.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  909.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  910.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  911.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  912.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  913.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  914.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  915.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  916.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  917.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  918.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  919.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  920.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  921.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  922.    1,   1,   1,   1,   1,   1,   1,   1,   3,   2,
  923.    0,   3,   0,   3,   1,   2,   0,   3,   3,   1,
  924.    2,   1,   2,   0,   3,   2,   2,   1,   2,   3,
  925.    3,   1,   3,   0,   3,   3,   4,   2,   0,   3,
  926.    2,   3,   3,   3,   3,   3,   2,   2,   1,   2,
  927.    1,   2,   2,   2,   2,   1,   2,   1,   2,   3,
  928.    4,   0,   3,   0,   2,   3,   1,   4,   1,   4,
  929.    3,   3,   3,   6,   6,   0,   2,   1,   6,   1,
  930.    3,   3,   1,   3,   2,   1,   1,   1,   1,   1,
  931.    1,   1,   1,   1,   1,   1,   1,   1,   1,   2,
  932.    1,   1,   3,   0,   2,   1,   1,   2,   1,   3,
  933.    2,   1,   0,   2,   1,   0,   0,   2 };
  934. short yychk[]={
  935.  
  936. -1000,  -1,  -2,  -3,  -5, -87,  -4,  -6,  -7, 257,
  937.   -8, -11, -13, 425, 427, 428, 429, 459, -16, -17,
  938.  -18, -20, 461, 460, -21, -23, 290, 440, 412, 439,
  939.  438, 441, 434, -25, -27, -28, -29, -30, -31, -32,
  940.  -33, -34, 445, 444, -35, -36, -37, -38, -39, -41,
  941.  -42, -43, -45, -46, -47, -48, -49, -51, -52, -53,
  942.  -55, -56, -57, -58, -59, -61, -62, -63, 462, 463,
  943.  464, 465, 466, 467, 468, 469, 470, 485, 471, 474,
  944.  472, 473, 475, 477, 476, 478, 479, 480, 481, 482,
  945.  483, 486, 487, 488, 489, 490, 491, 492, 494, 493,
  946.  495, 496, 497, 498, 499, 484, 500, 501, 502, 346,
  947.  345, 348, 347, 356, 354, 355, 426, 380, 350, 352,
  948.  353, 349, 458, 457, 351, 431, 430, 382, 383, 404,
  949.  402, 403, 446, 398, 400, 401, 399, 456, 455, 381,
  950.  405, 270, 268, 273, 411, 379, 389, 388, 384, 390,
  951.  392, 267, 266, 272, 378, 410, 387, 386, 385, 391,
  952.  393, 377, 396, 394, 339, 337, 443, 442, 437, 436,
  953.  435, 372, 371, 453, 452, 451, 450, 449, 448, 447,
  954.  454, 275, 277, 279, 281, 274, 276, 278, 280, 284,
  955.  283, 285, 286, 288, 287, 414, 423, 282, 289, 418,
  956.  417, 416, 415, 422, 421, 420, 419, 344, 343, 342,
  957.  341, 424, 413, 364, 363, 361, 362, 369, 370, 357,
  958.  358, 432, 359, 360, 365, 366, 433, 367, 368, 291,
  959.  292, 293, 294, 299, 300, 301, 302, 265, 264, 271,
  960.  269, 340, 338, 374, 373, 397, 395, 303, 304, 305,
  961.  306, 307, 308, 376, 375, 312, 336, 310, 332, 326,
  962.  334, 330, 320, 328, 322, 316, 318, 314, 324, 311,
  963.  335, 309, 331, 325, 333, 329, 319, 327, 321, 315,
  964.  317, 313, 323,  58,  61, 259, 257, 257,  -9, -74,
  965.  260, -12, 260, 261,  -9,  -9,  -9, -15, -81, 261,
  966.  -15,  -9,  -9, -15, -19, -74, -12, -19, -19, -22,
  967.  -81, 258,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,
  968.   -9,  -9,  -9,  -9,  -9, -24, -74,  -9,  -9,  -9,
  969.   -9,  -9,  -9, -40,  -5, -24, -24, -24, -24, -24,
  970.  -24, -24, -40, -24, -50, -74, -40, -12, -54, -74,
  971.  -54, -54, -12, -15, -15, -15, -15, -22, 260, -64,
  972.  258,  -5, -65, -67, 258, -68,  -5, 258, 258, -70,
  973.  -72, -85, 258,  -5,  -5, 258, -73, 258, -74,  -5,
  974.  -75,  -5,  -5, 258, 258, 258, 260,  -5, -64, 258,
  975.  258,  -5, -64, -64, 258, 258, 258, -74, -76, 258,
  976.  -10, -77, -10, -14, -79,  40,  -5, 259, 258, -10,
  977.  -14, 263, 263, -10, -10, -10, -10, -10, -10, -10,
  978.  -10, -24, -24, -24, -24, -24, -24, -14, -24, 258,
  979.  -24, -14, -24, -24, -14, -24, -14, -24, -24, -26,
  980.  -74, -24, -24, -24, -24, -24, -24, -40, -40, -26,
  981.  -44, -80, -26, -44, -26, -44, -26, -44, -26, -44,
  982.  -24, -12, -12, -12, -22, -22, -60, -81, -60, -60,
  983.  260, -66, -82, 262, -66, -69, -83, -84, -64, -71,
  984.  263, -86,  -5, 258, -64, 262, -71, 258, 258, -69,
  985.  -64, 258, 258, 258, 260, 258, 258, -69, -78,  40,
  986.  -79, 259, -79,  43,  45,  43, 258, -26, -14, -26,
  987.  258, -14, 258, -26, -26, -14, -26, -14, -26, -14,
  988.  -26, -14, -26, -14, -26, -14, -26, -14, -26, -14,
  989.  -26, -14, -26, -14, -40, -40, -14, -40, -40, -40,
  990.  -40, -40, -40, -40, -40, -60, -82,  58, -83,  58,
  991.  -64, 263, -74, 258, -74,  40,  43,  40,  43,  45,
  992.   41, -79, -79, 258, 258, 258,  41, -74,  -5, -74,
  993.  -79, -79,  62,  41,  41,  40,  40,  62, -74, -74,
  994.  258,  41,  41 };
  995. short yydef[]={
  996.  
  997.    1,  -2,  -2,   9,   0,   0,   2,   0,   0,   8,
  998.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  999.    0,   0,   0,   0,   0,  25,   0,  27,   0,   0,
  1000.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  1001.    0,   0,   0,   0,   0,   0,   0,   0, 376,   0,
  1002.    0,   0,   0,   0,   0,   0, 376, 376,   0,   0,
  1003.    0,   0,   0,   0,   0,   0,   0,   0,   0, 376,
  1004.  270, 272, 274,   0, 276, 376, 279, 281, 283, 372,
  1005.    0, 287, 376, 376, 291,   0, 293,   0,   0, 376,
  1006.  298, 376, 376,   0,   0,   0,   0, 376, 376, 308,
  1007.  310, 376, 376, 376, 315, 317,   0,   0, 321,  94,
  1008.   95,  96,  97,  98,  99, 100, 101, 102, 103, 104,
  1009.  105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
  1010.  115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
  1011.  125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
  1012.  135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
  1013.  145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
  1014.  155, 164, 165, 156, 157, 158, 159, 160, 161, 162,
  1015.  163, 166, 167, 168, 169, 170, 171, 172, 173, 174,
  1016.  175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
  1017.  185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
  1018.  195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
  1019.  205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
  1020.  215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
  1021.  225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
  1022.  235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
  1023.  245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
  1024.  255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
  1025.  265, 266, 267,   3,   0, 377,   6,   7, 323, 345,
  1026.  351, 323, 356, 357,   0, 323,   0,   0, 352, 355,
  1027.    0, 323, 323, 323, 323, 350, 323, 323, 323, 323,
  1028.  353,  26,   0,   0,   0,   0,   0,   0,   0,   0,
  1029.    0,   0,   0,   0,   0,   0, 346,   0,   0,   0,
  1030.    0,   0,   0,  67, 358, 376, 376, 335, 335, 335,
  1031.  335, 335,  80,  81,   0,  -2,  83,   0,  85, 349,
  1032.   86,   0,   0,   0,   0,   0,   0,   0,   0, 269,
  1033.  365, 366,   0,   0, 275, 363, 376, 280, 282,   0,
  1034.  285,  -2, 286, 288, 376,   0,   0,   0,   0, 297,
  1035.  363, 300, 376,   0,   0,   0,   0, 306, 307, 309,
  1036.  311, 312, 313, 314, 316, 318,   0,   0, 363,   4,
  1037.   10,   0,  11,  12, 337,   0, 339,   0, 342,  13,
  1038.   14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
  1039.   24,  28,  29,  30,  31,  32,   0,  35,   0,  38,
  1040.    0,  40,   0,   0,  45,   0,  48,  49,   0,  54,
  1041.  347,   0,   0,   0,   0,   0,   0,  68,  69, 376,
  1042.  376,   0, 376, 376, 376, 376, 376, 376, 376, 376,
  1043.   82,  84,  87,  88,  89,   0,  91, 354,  92,  93,
  1044.  268, 271, 360, 361, 273,  -2, 368, 376, 278, 284,
  1045.  371, 373, 374, 289, 290, 292, 294, 295,   0,  -2,
  1046.  301, 302, 303, 304, 305, 319,   0,  -2, 324,   0,
  1047.  326, 328,   0,   0,   0,   0, 344,  33,  34,  36,
  1048.   37,  39,  41,  42,  43,  44,  46,  47,  50,  51,
  1049.   52,  53,  55,  57,  56,  58,  59,  60,  61,  62,
  1050.   63,  64,  65,  66,  70,  71, 336,  72,  73,  74,
  1051.   75,  76,  77,  78,  79,  90, 359,   0, 367,   0,
  1052.  364, 370, 296, 320,   0,   0, 376,   0,   0,   0,
  1053.    0, 340, 341, 343, 362, 369, 325,   0, 331,   0,
  1054.  330, 332,   0, 327, 329,   0,   0,   0,   0,   0,
  1055.  338, 333, 334 };
  1056. #ifndef lint
  1057. static char yaccpar_sccsid[] = "@(#)yaccpar    4.1    (Berkeley)    2/11/83";
  1058. #endif
  1059.  
  1060. #
  1061. # define YYFLAG -1000
  1062. # define YYERROR goto yyerrlab
  1063. # define YYACCEPT return(0)
  1064. # define YYABORT return(1)
  1065.  
  1066. /*    parser for yacc output    */
  1067.  
  1068. #ifdef YYDEBUG
  1069. int yydebug = 0; /* 1 for debugging */
  1070. #endif
  1071. YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  1072. int yychar = -1; /* current input token number */
  1073. int yynerrs = 0;  /* number of errors */
  1074. short yyerrflag = 0;  /* error recovery flag */
  1075.  
  1076. yyparse() {
  1077.  
  1078.     short yys[YYMAXDEPTH];
  1079.     short yyj, yym;
  1080.     register YYSTYPE *yypvt;
  1081.     register short yystate, *yyps, yyn;
  1082.     register YYSTYPE *yypv;
  1083.     register short *yyxi;
  1084.  
  1085.     yystate = 0;
  1086.     yychar = -1;
  1087.     yynerrs = 0;
  1088.     yyerrflag = 0;
  1089.     yyps= &yys[-1];
  1090.     yypv= &yyv[-1];
  1091.  
  1092.  yystack:    /* put a state and value onto the stack */
  1093.  
  1094. #ifdef YYDEBUG
  1095.     if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
  1096. #endif
  1097.         if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
  1098.         *yyps = yystate;
  1099.         ++yypv;
  1100.         *yypv = yyval;
  1101.  
  1102.  yynewstate:
  1103.  
  1104.     yyn = yypact[yystate];
  1105.  
  1106.     if( yyn<= YYFLAG ) goto yydefault; /* simple state */
  1107.  
  1108.     if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
  1109.     if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
  1110.  
  1111.     if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
  1112.         yychar = -1;
  1113.         yyval = yylval;
  1114.         yystate = yyn;
  1115.         if( yyerrflag > 0 ) --yyerrflag;
  1116.         goto yystack;
  1117.         }
  1118.  
  1119.  yydefault:
  1120.     /* default state action */
  1121.  
  1122.     if( (yyn=yydef[yystate]) == -2 ) {
  1123.         if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
  1124.         /* look through exception table */
  1125.  
  1126.         for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
  1127.  
  1128.         while( *(yyxi+=2) >= 0 ){
  1129.             if( *yyxi == yychar ) break;
  1130.             }
  1131.         if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  1132.         }
  1133.  
  1134.     if( yyn == 0 ){ /* error */
  1135.         /* error ... attempt to resume parsing */
  1136.  
  1137.         switch( yyerrflag ){
  1138.  
  1139.         case 0:   /* brand new error */
  1140.  
  1141.             yyerror( "syntax error" );
  1142.         yyerrlab:
  1143.             ++yynerrs;
  1144.  
  1145.         case 1:
  1146.         case 2: /* incompletely recovered error ... try again */
  1147.  
  1148.             yyerrflag = 3;
  1149.  
  1150.             /* find a state where "error" is a legal shift action */
  1151.  
  1152.             while ( yyps >= yys ) {
  1153.                yyn = yypact[*yyps] + YYERRCODE;
  1154.                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
  1155.                   yystate = yyact[yyn];  /* simulate a shift of "error" */
  1156.                   goto yystack;
  1157.                   }
  1158.                yyn = yypact[*yyps];
  1159.  
  1160.                /* the current yyps has no shift onn "error", pop stack */
  1161.  
  1162. #ifdef YYDEBUG
  1163.                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  1164. #endif
  1165.                --yyps;
  1166.                --yypv;
  1167.                }
  1168.  
  1169.             /* there is no state on the stack with an error shift ... abort */
  1170.  
  1171.     yyabort:
  1172.             return(1);
  1173.  
  1174.  
  1175.         case 3:  /* no shift yet; clobber input char */
  1176.  
  1177. #ifdef YYDEBUG
  1178.             if( yydebug ) printf( "error recovery discards char %d\n", yychar );
  1179. #endif
  1180.  
  1181.             if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  1182.             yychar = -1;
  1183.             goto yynewstate;   /* try again in the same state */
  1184.  
  1185.             }
  1186.  
  1187.         }
  1188.  
  1189.     /* reduction by production yyn */
  1190.  
  1191. #ifdef YYDEBUG
  1192.         if( yydebug ) printf("reduce %d\n",yyn);
  1193. #endif
  1194.         yyps -= yyr2[yyn];
  1195.         yypvt = yypv;
  1196.         yypv -= yyr2[yyn];
  1197.         yyval = yypv[1];
  1198.         yym=yyn;
  1199.             /* consult goto table to find next state */
  1200.         yyn = yyr1[yyn];
  1201.         yyj = yypgo[yyn] + *yyps + 1;
  1202.         if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  1203.         switch(yym){
  1204.             
  1205. case 1:
  1206. # line 370 "parser.y"
  1207. {scanner_start_line (); clear_labels ();} break;
  1208. case 3:
  1209. # line 375 "parser.y"
  1210. {
  1211.                this_line_labels =
  1212.                  cons_label (record_label
  1213.                      ((char *)yypvt[-1],
  1214.                       (text_dir ? current_text_pc ()
  1215.                        : current_data_pc ())),
  1216.                      this_line_labels);
  1217.              } break;
  1218. case 4:
  1219. # line 385 "parser.y"
  1220. {
  1221.           label *l = record_label ((char *) yypvt[-2], (mem_addr) yypvt[-0]);
  1222.  
  1223.           l->const_flag = 1;
  1224.           clear_labels ();
  1225.         } break;
  1226. case 6:
  1227. # line 397 "parser.y"
  1228. {
  1229.           clear_labels ();
  1230.           LINE_PARSE_DONE;
  1231.         } break;
  1232. case 7:
  1233. # line 403 "parser.y"
  1234. {
  1235.           clear_labels ();
  1236.           LINE_PARSE_DONE;
  1237.         } break;
  1238. case 8:
  1239. # line 409 "parser.y"
  1240. {
  1241.           clear_labels ();
  1242.           LINE_PARSE_DONE;
  1243.         } break;
  1244. case 9:
  1245. # line 414 "parser.y"
  1246. {
  1247.           clear_labels ();
  1248.           FILE_PARSE_DONE;
  1249.         } break;
  1250. case 10:
  1251. # line 423 "parser.y"
  1252. {
  1253.           i_type_inst (yypvt[-2] == Y_LD_POP ? Y_LW_OP : yypvt[-2],
  1254.                    yypvt[-1],
  1255.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1256.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1257.           if (yypvt[-2] == Y_LD_POP)
  1258.             i_type_inst_free (Y_LW_OP,
  1259.                       yypvt[-1] + 1,
  1260.                       addr_expr_reg ((addr_expr *)yypvt[-0]),
  1261.                       incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1262.                             4));
  1263.           free (((addr_expr *)yypvt[-0])->imm);
  1264.           free ((addr_expr *)yypvt[-0]);
  1265.         } break;
  1266. case 11:
  1267. # line 439 "parser.y"
  1268. {
  1269.           i_type_inst (yypvt[-2], yypvt[-1], addr_expr_reg ((addr_expr *)yypvt[-0]),
  1270.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1271.           free (((addr_expr *)yypvt[-0])->imm);
  1272.           free ((addr_expr *)yypvt[-0]);
  1273.         } break;
  1274. case 12:
  1275. # line 447 "parser.y"
  1276. {
  1277.           i_type_inst_free (yypvt[-2], yypvt[-1], 0, (imm_expr *)yypvt[-0]);
  1278.         } break;
  1279. case 13:
  1280. # line 453 "parser.y"
  1281. {
  1282.           if (addr_expr_reg ((addr_expr *)yypvt[-0]))
  1283.             i_type_inst (Y_ADDI_OP, yypvt[-1],
  1284.                  addr_expr_reg ((addr_expr *)yypvt[-0]),
  1285.                  addr_expr_imm ((addr_expr *)yypvt[-0]));
  1286.           else
  1287.             i_type_inst (Y_LUI_OP, yypvt[-1], 0,
  1288.                  addr_expr_imm ((addr_expr *)yypvt[-0]));
  1289.           free (((addr_expr *)yypvt[-0])->imm);
  1290.           free ((addr_expr *)yypvt[-0]);
  1291.         } break;
  1292. case 14:
  1293. # line 467 "parser.y"
  1294. {
  1295.           i_type_inst_free (Y_ORI_OP, yypvt[-1], 0, (imm_expr *)yypvt[-0]);
  1296.         } break;
  1297. case 15:
  1298. # line 473 "parser.y"
  1299. {
  1300.           int *x = (int *) yypvt[-0];
  1301.  
  1302.           i_type_inst (Y_ORI_OP, 1, 0, const_imm_expr (*x));
  1303.           r_type_inst (Y_MTC1_OP, yypvt[-1], 0, 1);
  1304.           i_type_inst (Y_ORI_OP, 1, 0, const_imm_expr (*(x+1)));
  1305.           r_type_inst (Y_MTC1_OP, yypvt[-1] + 1, 0, 1);
  1306.         } break;
  1307. case 16:
  1308. # line 484 "parser.y"
  1309. {
  1310.           float x = * ((double *) yypvt[-0]);
  1311.           int *y = (int *) &x;
  1312.  
  1313.           i_type_inst (Y_ORI_OP, 1, 0, const_imm_expr (*y));
  1314.           r_type_inst (Y_MTC1_OP, yypvt[-1], 0, 1);
  1315.         } break;
  1316. case 17:
  1317. # line 494 "parser.y"
  1318. {
  1319. #ifdef BIGENDIAN
  1320.           i_type_inst (Y_LWL_OP, yypvt[-1],
  1321.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1322.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1323.           i_type_inst_free (Y_LWR_OP, yypvt[-1],
  1324.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1325.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1326.                               3));
  1327. #else
  1328.           i_type_inst_free (Y_LWL_OP, yypvt[-1],
  1329.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1330.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1331.                               3));
  1332.           i_type_inst (Y_LWR_OP, yypvt[-1],
  1333.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1334.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1335. #endif
  1336.           free (((addr_expr *)yypvt[-0])->imm);
  1337.           free ((addr_expr *)yypvt[-0]);
  1338.         } break;
  1339. case 18:
  1340. # line 518 "parser.y"
  1341. {
  1342. #ifdef BIGENDIAN
  1343.           i_type_inst ((yypvt[-2] == Y_ULH_POP ? Y_LB_OP : Y_LBU_OP),
  1344.                    yypvt[-1],
  1345.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1346.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1347.           i_type_inst_free (Y_LBU_OP, 1,
  1348.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1349.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1350.                               1));
  1351. #else
  1352.           i_type_inst_free ((yypvt[-2] == Y_ULH_POP ? Y_LB_OP : Y_LBU_OP),
  1353.                     yypvt[-1],
  1354.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1355.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1356.                               1));
  1357.           i_type_inst (Y_LBU_OP, 1,
  1358.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1359.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1360. #endif
  1361.           r_sh_type_inst (Y_SLL_OP, yypvt[-1], yypvt[-1], 8);
  1362.           r_type_inst (Y_OR_OP, yypvt[-1], yypvt[-1], 1);
  1363.           free (((addr_expr *)yypvt[-0])->imm);
  1364.           free ((addr_expr *)yypvt[-0]);
  1365.         } break;
  1366. case 19:
  1367. # line 546 "parser.y"
  1368. {
  1369.           i_type_inst (Y_LWC1_OP, yypvt[-1],
  1370.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1371.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1372.           if (yypvt[-2] == Y_L_D_POP)
  1373.             i_type_inst_free (Y_LWC1_OP, yypvt[-1] + 1,
  1374.                       addr_expr_reg ((addr_expr *)yypvt[-0]),
  1375.                       incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1376.                             4));
  1377.           free (((addr_expr *)yypvt[-0])->imm);
  1378.           free ((addr_expr *)yypvt[-0]);
  1379.         } break;
  1380. case 20:
  1381. # line 561 "parser.y"
  1382. {
  1383.           i_type_inst (yypvt[-2] == Y_SD_POP ? Y_SW_OP : yypvt[-2],
  1384.                    yypvt[-1],
  1385.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1386.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1387.           if (yypvt[-2] == Y_SD_POP)
  1388.             i_type_inst_free (Y_SW_OP, yypvt[-1] + 1,
  1389.                       addr_expr_reg ((addr_expr *)yypvt[-0]),
  1390.                       incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1391.                             4));
  1392.           free (((addr_expr *)yypvt[-0])->imm);
  1393.           free ((addr_expr *)yypvt[-0]);
  1394.         } break;
  1395. case 21:
  1396. # line 577 "parser.y"
  1397. {
  1398.           i_type_inst (yypvt[-2], yypvt[-1],
  1399.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1400.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1401.           free (((addr_expr *)yypvt[-0])->imm);
  1402.           free ((addr_expr *)yypvt[-0]);
  1403.         } break;
  1404. case 22:
  1405. # line 587 "parser.y"
  1406. {
  1407. #ifdef BIGENDIAN
  1408.           i_type_inst (Y_SWL_OP, yypvt[-1],
  1409.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1410.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1411.           i_type_inst_free (Y_SWR_OP, yypvt[-1],
  1412.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1413.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1414.                               3));
  1415. #else
  1416.           i_type_inst_free (Y_SWL_OP, yypvt[-1],
  1417.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1418.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1419.                               3));
  1420.           i_type_inst (Y_SWR_OP, yypvt[-1],
  1421.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1422.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1423. #endif
  1424.           free (((addr_expr *)yypvt[-0])->imm);
  1425.           free ((addr_expr *)yypvt[-0]);
  1426.         } break;
  1427. case 23:
  1428. # line 611 "parser.y"
  1429. {
  1430.           i_type_inst (Y_SB_OP, yypvt[-1],
  1431.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1432.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1433.           r_sh_type_inst (Y_SRL_OP, 1, yypvt[-1], 8);
  1434.           i_type_inst_free (Y_SB_OP, 1,
  1435.                     addr_expr_reg ((addr_expr *)yypvt[-0]),
  1436.                     incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1437.                               1));
  1438.           free (((addr_expr *)yypvt[-0])->imm);
  1439.           free ((addr_expr *)yypvt[-0]);
  1440.         } break;
  1441. case 24:
  1442. # line 626 "parser.y"
  1443. {
  1444.           i_type_inst (Y_SWC1_OP, yypvt[-1],
  1445.                    addr_expr_reg ((addr_expr *)yypvt[-0]),
  1446.                    addr_expr_imm ((addr_expr *)yypvt[-0]));
  1447.           if (yypvt[-2] == Y_S_D_POP)
  1448.             i_type_inst_free (Y_SWC1_OP, yypvt[-1] + 1,
  1449.                       addr_expr_reg ((addr_expr *)yypvt[-0]),
  1450.                       incr_expr_offset (addr_expr_imm ((addr_expr *)yypvt[-0]),
  1451.                             4));
  1452.           free (((addr_expr *)yypvt[-0])->imm);
  1453.           free ((addr_expr *)yypvt[-0]);
  1454.         } break;
  1455. case 25:
  1456. # line 641 "parser.y"
  1457. {
  1458.           r_type_inst (yypvt[-0], 0, 0, 0);
  1459.         } break;
  1460. case 26:
  1461. # line 647 "parser.y"
  1462. {
  1463.           if (yypvt[-0] == 1)
  1464.             yyerror ("Breakpoint 1 is reserved for debugger");
  1465.           r_type_inst (yypvt[-1], yypvt[-0], 0, 0);
  1466.         } break;
  1467. case 27:
  1468. # line 655 "parser.y"
  1469. {
  1470.           nop_inst ();
  1471.         } break;
  1472. case 28:
  1473. # line 661 "parser.y"
  1474. {
  1475.           if (yypvt[-1] != yypvt[-0])
  1476.             r_type_inst (Y_ADDU_OP, yypvt[-1], 0, yypvt[-0]);
  1477.  
  1478.           i_type_inst_free (Y_BGEZ_OP, 0, yypvt[-0], branch_offset (2));
  1479.           r_type_inst (Y_SUB_OP, yypvt[-1], 0, yypvt[-0]);
  1480.         } break;
  1481. case 29:
  1482. # line 671 "parser.y"
  1483. {
  1484.           r_type_inst (Y_SUB_OP, yypvt[-1], 0, yypvt[-0]);
  1485.         } break;
  1486. case 30:
  1487. # line 677 "parser.y"
  1488. {
  1489.           r_type_inst (Y_SUBU_OP, yypvt[-1], 0, yypvt[-0]);
  1490.         } break;
  1491. case 31:
  1492. # line 683 "parser.y"
  1493. {
  1494.           r_type_inst (Y_NOR_OP, yypvt[-1], yypvt[-0], 0);
  1495.         } break;
  1496. case 32:
  1497. # line 689 "parser.y"
  1498. {
  1499.           r_type_inst (Y_ADDU_OP, yypvt[-1], 0, yypvt[-0]);
  1500.         } break;
  1501. case 33:
  1502. # line 695 "parser.y"
  1503. {
  1504.           r_type_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1505.         } break;
  1506. case 34:
  1507. # line 701 "parser.y"
  1508. {
  1509.           i_type_inst_free (op_to_imm_op (yypvt[-3]), yypvt[-2], yypvt[-1], (imm_expr *)yypvt[-0]);
  1510.         } break;
  1511. case 35:
  1512. # line 707 "parser.y"
  1513. {
  1514.           i_type_inst_free (op_to_imm_op (yypvt[-2]), yypvt[-1], yypvt[-1], (imm_expr *)yypvt[-0]);
  1515.         } break;
  1516. case 36:
  1517. # line 713 "parser.y"
  1518. {
  1519.           r_type_inst (yypvt[-3], yypvt[-2], yypvt[-0], yypvt[-1]);
  1520.         } break;
  1521. case 37:
  1522. # line 719 "parser.y"
  1523. {
  1524.           r_sh_type_inst (op_to_imm_op (yypvt[-3]), yypvt[-2], yypvt[-1], yypvt[-0]);
  1525.         } break;
  1526. case 38:
  1527. # line 725 "parser.y"
  1528. {
  1529.           r_sh_type_inst (op_to_imm_op (yypvt[-2]), yypvt[-1], yypvt[-1], yypvt[-0]);
  1530.         } break;
  1531. case 39:
  1532. # line 731 "parser.y"
  1533. {
  1534.           i_type_inst_free (yypvt[-3], yypvt[-2], yypvt[-1], (imm_expr *)yypvt[-0]);
  1535.         } break;
  1536. case 40:
  1537. # line 737 "parser.y"
  1538. {
  1539.           i_type_inst_free (yypvt[-2], yypvt[-1], yypvt[-1], (imm_expr *)yypvt[-0]);
  1540.         } break;
  1541. case 41:
  1542. # line 743 "parser.y"
  1543. {
  1544.           r_sh_type_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1545.         } break;
  1546. case 42:
  1547. # line 749 "parser.y"
  1548. {
  1549.           r_type_inst (imm_op_to_op (yypvt[-3]), yypvt[-2], yypvt[-1], yypvt[-0]);
  1550.         } break;
  1551. case 43:
  1552. # line 755 "parser.y"
  1553. {
  1554.           r_type_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1555.         } break;
  1556. case 44:
  1557. # line 761 "parser.y"
  1558. {
  1559.           if (bare_machine)
  1560.             yyerror ("Immediate form not allowed in bare machine");
  1561.           else
  1562.             {
  1563.               if (!zero_imm ((imm_expr *)yypvt[-0]))
  1564.             /* Use $at */
  1565.             i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1566.               r_type_inst (yypvt[-3],
  1567.                    yypvt[-2],
  1568.                    yypvt[-1],
  1569.                    (zero_imm ((imm_expr *)yypvt[-0]) ? 0 : 1));
  1570.             }
  1571.           free ((imm_expr *)yypvt[-0]);
  1572.         } break;
  1573. case 45:
  1574. # line 779 "parser.y"
  1575. {
  1576.           if (bare_machine)
  1577.             yyerror ("Immediate form not allowed in bare machine");
  1578.           else
  1579.             {
  1580.               if (!zero_imm ((imm_expr *)yypvt[-0]))
  1581.             /* Use $at */
  1582.             i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1583.               r_type_inst (yypvt[-2],
  1584.                    yypvt[-1],
  1585.                    yypvt[-1],
  1586.                    (zero_imm ((imm_expr *)yypvt[-0]) ? 0 : 1));
  1587.             }
  1588.           free ((imm_expr *)yypvt[-0]);
  1589.         } break;
  1590. case 46:
  1591. # line 797 "parser.y"
  1592. {
  1593.           r_type_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1594.         } break;
  1595. case 47:
  1596. # line 803 "parser.y"
  1597. {
  1598.           int val = eval_imm_expr (yypvt[-0]);
  1599.  
  1600.           if (bare_machine)
  1601.             yyerror ("Immediate form not allowed in bare machine");
  1602.           else
  1603.             i_type_inst (yypvt[-3] == Y_SUB_OP ? Y_ADDI_OP
  1604.                  : yypvt[-3] == Y_SUBU_OP ? Y_ADDIU_OP
  1605.                  : (fatal_error ("Bad SUB_OP\n"), 0),
  1606.                  yypvt[-2],
  1607.                  yypvt[-1],
  1608.                  make_imm_expr ( -val, NULL, 0));
  1609.           free ((imm_expr *)yypvt[-0]);
  1610.         } break;
  1611. case 48:
  1612. # line 820 "parser.y"
  1613. {
  1614.           int val = eval_imm_expr (yypvt[-0]);
  1615.  
  1616.           if (bare_machine)
  1617.             yyerror ("Immediate form not allowed in bare machine");
  1618.           else
  1619.             i_type_inst (yypvt[-2] == Y_SUB_OP ? Y_ADDI_OP
  1620.                  : yypvt[-2] == Y_SUBU_OP ? Y_ADDIU_OP
  1621.                  : (fatal_error ("Bad SUB_OP\n"), 0),
  1622.                  yypvt[-1],
  1623.                  yypvt[-1],
  1624.                  make_imm_expr (-val, NULL, 0));
  1625.           free ((imm_expr *)yypvt[-0]);
  1626.         } break;
  1627. case 49:
  1628. # line 837 "parser.y"
  1629. {
  1630.           /* The hardware divide operation (ignore 1st arg) */
  1631.           if (yypvt[-2] != Y_DIV_OP && yypvt[-2] != Y_DIVU_OP)
  1632.             yyerror ("Syntax error");
  1633.           r_type_inst (yypvt[-2], 0, yypvt[-1], yypvt[-0]);
  1634.         } break;
  1635. case 50:
  1636. # line 845 "parser.y"
  1637. {
  1638.           /* Pseudo divide operations */
  1639.           div_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0], 0);
  1640.         } break;
  1641. case 51:
  1642. # line 851 "parser.y"
  1643. {
  1644.           if (zero_imm ((imm_expr *)yypvt[-0]))
  1645.             yyerror ("Divide by zero");
  1646.           else
  1647.             {
  1648.               /* Use $at */
  1649.               i_type_inst_free (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1650.               div_inst (yypvt[-3], yypvt[-2], yypvt[-1], 1, 1);
  1651.             }
  1652.         } break;
  1653. case 52:
  1654. # line 864 "parser.y"
  1655. {
  1656.           mult_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1657.         } break;
  1658. case 53:
  1659. # line 869 "parser.y"
  1660. {
  1661.           if (zero_imm ((imm_expr *)yypvt[-0]))
  1662.             r_type_inst (Y_ORI_OP, yypvt[-2], 0, 0);
  1663.           else
  1664.             {
  1665.               /* Use $at */
  1666.               i_type_inst_free (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1667.               mult_inst (yypvt[-3], yypvt[-2], yypvt[-1], 1);
  1668.             }
  1669.         } break;
  1670. case 54:
  1671. # line 882 "parser.y"
  1672. {
  1673.           r_type_inst (yypvt[-2], 0, yypvt[-1], yypvt[-0]);
  1674.         } break;
  1675. case 55:
  1676. # line 888 "parser.y"
  1677. {
  1678.           r_type_inst (Y_SUBU_OP, 1, 0, yypvt[-0]);
  1679.           r_type_inst (Y_SLLV_OP, 1, 1, yypvt[-1]);
  1680.           r_type_inst (Y_SRLV_OP, yypvt[-2], yypvt[-0], yypvt[-1]);
  1681.           r_type_inst (Y_OR_OP, yypvt[-2], yypvt[-2], 1);
  1682.         } break;
  1683. case 56:
  1684. # line 897 "parser.y"
  1685. {
  1686.           r_type_inst (Y_SUBU_OP, 1, 0, yypvt[-0]);
  1687.           r_type_inst (Y_SRLV_OP, 1, 1, yypvt[-1]);
  1688.           r_type_inst (Y_SLLV_OP, yypvt[-2], yypvt[-0], yypvt[-1]);
  1689.           r_type_inst (Y_OR_OP, yypvt[-2], yypvt[-2], 1);
  1690.         } break;
  1691. case 57:
  1692. # line 906 "parser.y"
  1693. {
  1694.           long dist = eval_imm_expr ((imm_expr *)yypvt[-0]);
  1695.  
  1696.           r_sh_type_inst (Y_SLL_OP, 1, yypvt[-1], -dist);
  1697.           r_sh_type_inst (Y_SRL_OP, yypvt[-2], yypvt[-1], dist);
  1698.           r_type_inst (Y_OR_OP, yypvt[-2], yypvt[-2], 1);
  1699.           free ((imm_expr *)yypvt[-0]);
  1700.         } break;
  1701. case 58:
  1702. # line 917 "parser.y"
  1703. {
  1704.           long dist = eval_imm_expr ((imm_expr *)yypvt[-0]);
  1705.  
  1706.           r_sh_type_inst (Y_SRL_OP, 1, yypvt[-1], -dist);
  1707.           r_sh_type_inst (Y_SLL_OP, yypvt[-2], yypvt[-1], dist);
  1708.           r_type_inst (Y_OR_OP, yypvt[-2], yypvt[-2], 1);
  1709.           free ((imm_expr *)yypvt[-0]);
  1710.         } break;
  1711. case 59:
  1712. # line 929 "parser.y"
  1713. {
  1714.           set_le_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1715.         } break;
  1716. case 60:
  1717. # line 934 "parser.y"
  1718. {
  1719.           if (!zero_imm ((imm_expr *)yypvt[-0]))
  1720.             /* Use $at */
  1721.             i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1722.           set_le_inst (yypvt[-3], yypvt[-2], yypvt[-1], (zero_imm ((imm_expr *)yypvt[-0]) ? 0 : 1));
  1723.           free ((imm_expr *)yypvt[-0]);
  1724.         } break;
  1725. case 61:
  1726. # line 944 "parser.y"
  1727. {
  1728.           set_gt_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1729.         } break;
  1730. case 62:
  1731. # line 949 "parser.y"
  1732. {
  1733.           if (!zero_imm ((imm_expr *)yypvt[-0]))
  1734.             /* Use $at */
  1735.             i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1736.           set_gt_inst (yypvt[-3], yypvt[-2], yypvt[-1], (zero_imm ((imm_expr *)yypvt[-0]) ? 0 : 1));
  1737.           free ((imm_expr *)yypvt[-0]);
  1738.         } break;
  1739. case 63:
  1740. # line 960 "parser.y"
  1741. {
  1742.           set_ge_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1743.         } break;
  1744. case 64:
  1745. # line 965 "parser.y"
  1746. {
  1747.           if (!zero_imm ((imm_expr *)yypvt[-0]))
  1748.             /* Use $at */
  1749.             i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1750.           set_ge_inst (yypvt[-3], yypvt[-2], yypvt[-1], (zero_imm ((imm_expr *)yypvt[-0]) ? 0 : 1));
  1751.           free ((imm_expr *)yypvt[-0]);
  1752.         } break;
  1753. case 65:
  1754. # line 975 "parser.y"
  1755. {
  1756.           set_eq_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1757.         } break;
  1758. case 66:
  1759. # line 980 "parser.y"
  1760. {
  1761.           if (!zero_imm ((imm_expr *)yypvt[-0]))
  1762.             /* Use $at */
  1763.             i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-0]);
  1764.           set_eq_inst (yypvt[-3], yypvt[-2], yypvt[-1], (zero_imm ((imm_expr *)yypvt[-0]) ? 0 : 1));
  1765.           free ((imm_expr *)yypvt[-0]);
  1766.         } break;
  1767. case 67:
  1768. # line 990 "parser.y"
  1769. {
  1770.           i_type_inst_free (yypvt[-1], 0, 0, (imm_expr *)yypvt[-0]);
  1771.         } break;
  1772. case 68:
  1773. # line 996 "parser.y"
  1774. {
  1775.           i_type_inst_free (yypvt[-2], 0, yypvt[-1], (imm_expr *)yypvt[-0]);
  1776.         } break;
  1777. case 69:
  1778. # line 1002 "parser.y"
  1779. {
  1780.           i_type_inst_free (yypvt[-2] == Y_BEQZ_POP ? Y_BEQ_OP : Y_BNE_OP,
  1781.                    0, yypvt[-1], (imm_expr *)yypvt[-0]);
  1782.         } break;
  1783. case 70:
  1784. # line 1009 "parser.y"
  1785. {
  1786.           i_type_inst_free (yypvt[-3], yypvt[-1], yypvt[-2], (imm_expr *)yypvt[-0]);
  1787.         } break;
  1788. case 71:
  1789. # line 1014 "parser.y"
  1790. {
  1791.           if (bare_machine)
  1792.             yyerror ("Immediate form not allowed in bare machine");
  1793.           else
  1794.             {
  1795.               if (zero_imm ((imm_expr *)yypvt[-1]))
  1796.             i_type_inst (yypvt[-3], yypvt[-2], (zero_imm ((imm_expr *)yypvt[-1]) ? 0 : 1),
  1797.                      (imm_expr *)yypvt[-0]);
  1798.               else
  1799.             {
  1800.               /* Use $at */
  1801.               i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-1]);
  1802.               i_type_inst (yypvt[-3], yypvt[-2], (zero_imm ((imm_expr *)yypvt[-1]) ? 0 : 1),
  1803.                        (imm_expr *)yypvt[-0]);
  1804.             }
  1805.             }
  1806.           free ((imm_expr *)yypvt[-1]);
  1807.           free ((imm_expr *)yypvt[-0]);
  1808.         } break;
  1809. case 72:
  1810. # line 1036 "parser.y"
  1811. {
  1812.           r_type_inst (yypvt[-3] == Y_BGT_POP ? Y_SLT_OP : Y_SLTU_OP,
  1813.                    1, yypvt[-1], yypvt[-2]); /* Use $at */
  1814.           i_type_inst_free (Y_BNE_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1815.         } break;
  1816. case 73:
  1817. # line 1043 "parser.y"
  1818. {
  1819.           if (yypvt[-3] == Y_BGT_POP)
  1820.             {
  1821.               /* Use $at */
  1822.               i_type_inst_free (Y_SLTI_OP, 1, yypvt[-2],
  1823.                     incr_expr_offset ((imm_expr *)yypvt[-1], 1));
  1824.               i_type_inst (Y_BEQ_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1825.             }
  1826.           else
  1827.             {
  1828.               /* Use $at */
  1829.               /* Can't add 1 to immediate since 0xffffffff+1 = 0 < 1 */
  1830.               i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-1]);
  1831.               i_type_inst_free (Y_BEQ_OP, yypvt[-2], 1, branch_offset (3));
  1832.               r_type_inst (Y_SLTU_OP, 1, yypvt[-2], 1);
  1833.               i_type_inst (Y_BEQ_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1834.             }
  1835.           free ((imm_expr *)yypvt[-1]);
  1836.           free ((imm_expr *)yypvt[-0]);
  1837.         } break;
  1838. case 74:
  1839. # line 1066 "parser.y"
  1840. {
  1841.           r_type_inst (yypvt[-3] == Y_BGE_POP ? Y_SLT_OP : Y_SLTU_OP,
  1842.                    1, yypvt[-2], yypvt[-1]); /* Use $at */
  1843.           i_type_inst_free (Y_BEQ_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1844.         } break;
  1845. case 75:
  1846. # line 1073 "parser.y"
  1847. {
  1848.           i_type_inst (yypvt[-3] == Y_BGE_POP ? Y_SLTI_OP : Y_SLTIU_OP,
  1849.                    1, yypvt[-2], (imm_expr *)yypvt[-1]); /* Use $at */
  1850.           i_type_inst_free (Y_BEQ_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1851.           free ((imm_expr *)yypvt[-1]);
  1852.         } break;
  1853. case 76:
  1854. # line 1082 "parser.y"
  1855. {
  1856.           r_type_inst (yypvt[-3] == Y_BLT_POP ? Y_SLT_OP : Y_SLTU_OP,
  1857.                    1, yypvt[-2], yypvt[-1]); /* Use $at */
  1858.           i_type_inst_free (Y_BNE_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1859.         } break;
  1860. case 77:
  1861. # line 1089 "parser.y"
  1862. {
  1863.           i_type_inst (yypvt[-3] == Y_BLT_POP ? Y_SLTI_OP : Y_SLTIU_OP,
  1864.                    1, yypvt[-2], (imm_expr *)yypvt[-1]); /* Use $at */
  1865.           i_type_inst_free (Y_BNE_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1866.           free ((imm_expr *)yypvt[-1]);
  1867.         } break;
  1868. case 78:
  1869. # line 1098 "parser.y"
  1870. {
  1871.           r_type_inst (yypvt[-3] == Y_BLE_POP ? Y_SLT_OP : Y_SLTU_OP,
  1872.                    1, yypvt[-1], yypvt[-2]); /* Use $at */
  1873.           i_type_inst_free (Y_BEQ_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1874.         } break;
  1875. case 79:
  1876. # line 1105 "parser.y"
  1877. {
  1878.           if (yypvt[-3] == Y_BLE_POP)
  1879.             {
  1880.               /* Use $at */
  1881.               i_type_inst_free (Y_SLTI_OP, 1, yypvt[-2],
  1882.                     incr_expr_offset ((imm_expr *)yypvt[-1], 1));
  1883.               i_type_inst (Y_BNE_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1884.             }
  1885.           else
  1886.             {
  1887.               /* Use $at */
  1888.               /* Can't add 1 to immediate since 0xffffffff+1 = 0 < 1 */
  1889.               i_type_inst (Y_ORI_OP, 1, 0, (imm_expr *)yypvt[-1]);
  1890.               i_type_inst (Y_BEQ_OP, yypvt[-2], 1, (imm_expr *)yypvt[-0]);
  1891.               r_type_inst (Y_SLTU_OP, 1, yypvt[-2], 1);
  1892.               i_type_inst (Y_BNE_OP, 0, 1, (imm_expr *)yypvt[-0]);
  1893.             }
  1894.           free ((imm_expr *)yypvt[-1]);
  1895.           free ((imm_expr *)yypvt[-0]);
  1896.         } break;
  1897. case 80:
  1898. # line 1128 "parser.y"
  1899. {
  1900.           if ((yypvt[-1] == Y_J_OP) || (yypvt[-1] == Y_JR_OP))
  1901.             j_type_inst (Y_J_OP, (imm_expr *)yypvt[-0]);
  1902.           else if ((yypvt[-1] == Y_JAL_OP) || (yypvt[-1] == Y_JALR_OP))
  1903.             j_type_inst (Y_JAL_OP, (imm_expr *)yypvt[-0]);
  1904.           free ((imm_expr *)yypvt[-0]);
  1905.         } break;
  1906. case 81:
  1907. # line 1138 "parser.y"
  1908. {
  1909.           if ((yypvt[-1] == Y_J_OP) || (yypvt[-1] == Y_JR_OP))
  1910.             r_type_inst (Y_JR_OP, 0, yypvt[-0], 0);
  1911.           else if ((yypvt[-1] == Y_JAL_OP) || (yypvt[-1] == Y_JALR_OP))
  1912.             r_type_inst (Y_JALR_OP, 31, yypvt[-0], 0);
  1913.         } break;
  1914. case 82:
  1915. # line 1147 "parser.y"
  1916. {
  1917.           if ((yypvt[-2] == Y_J_OP) || (yypvt[-2] == Y_JR_OP))
  1918.             r_type_inst (Y_JR_OP, 0, yypvt[-0], 0);
  1919.           else if ((yypvt[-2] == Y_JAL_OP) || (yypvt[-2] == Y_JALR_OP))
  1920.             r_type_inst (Y_JALR_OP, yypvt[-1], yypvt[-0], 0);
  1921.         } break;
  1922. case 83:
  1923. # line 1156 "parser.y"
  1924. {
  1925.           i_type_inst_free ((yypvt[-1] == Y_BAL_POP ? Y_BGEZAL_OP : Y_BGEZ_OP),
  1926.                     0, 0, (imm_expr *)yypvt[-0]);
  1927.         } break;
  1928. case 84:
  1929. # line 1164 "parser.y"
  1930. {
  1931.           r_type_inst (yypvt[-2], yypvt[-1], yypvt[-0], 0);
  1932.         } break;
  1933. case 85:
  1934. # line 1170 "parser.y"
  1935. {
  1936.           r_type_inst (yypvt[-1], yypvt[-0], 0, 0);
  1937.         } break;
  1938. case 86:
  1939. # line 1176 "parser.y"
  1940. {
  1941.           r_type_inst (yypvt[-1], 0, yypvt[-0], 0);
  1942.         } break;
  1943. case 87:
  1944. # line 1182 "parser.y"
  1945. {
  1946.           if (yypvt[-2] == Y_MFC1_D_POP)
  1947.             {
  1948.               r_type_inst (Y_MFC1_OP, yypvt[-0], 0, yypvt[-1]);
  1949.               r_type_inst (Y_MFC1_OP, yypvt[-0] + 1, 0, yypvt[-1] + 1);
  1950.             }
  1951.           else if (yypvt[-2] == Y_MTC1_D_POP)
  1952.             {
  1953.               r_type_inst (Y_MTC1_OP, yypvt[-0], 0, yypvt[-1]);
  1954.               r_type_inst (Y_MTC1_OP, yypvt[-0] + 1, 0, yypvt[-1] + 1);
  1955.             }
  1956.           else
  1957.             r_type_inst (yypvt[-2], yypvt[-0], 0, yypvt[-1]);
  1958.         } break;
  1959. case 88:
  1960. # line 1199 "parser.y"
  1961. {
  1962.           r_type_inst (yypvt[-2], yypvt[-0], 0, yypvt[-1]);
  1963.         } break;
  1964. case 89:
  1965. # line 1205 "parser.y"
  1966. {
  1967.           r_type_inst (yypvt[-2], yypvt[-1], yypvt[-0], 0);
  1968.         } break;
  1969. case 90:
  1970. # line 1211 "parser.y"
  1971. {
  1972.           r_type_inst (yypvt[-3], yypvt[-2], yypvt[-1], yypvt[-0]);
  1973.         } break;
  1974. case 91:
  1975. # line 1217 "parser.y"
  1976. {
  1977.           r_type_inst (yypvt[-2], yypvt[-1], yypvt[-0], 0);
  1978.         } break;
  1979. case 92:
  1980. # line 1223 "parser.y"
  1981. {
  1982.           r_type_inst (yypvt[-2], yypvt[-1], yypvt[-0], 0);
  1983.         } break;
  1984. case 93:
  1985. # line 1229 "parser.y"
  1986. {
  1987.           r_cond_type_inst (yypvt[-2], yypvt[-1], yypvt[-0]);
  1988.         } break;
  1989. case 269:
  1990. # line 1502 "parser.y"
  1991. {
  1992.           align_data (yypvt[-0]);
  1993.         } break;
  1994. case 270:
  1995. # line 1506 "parser.y"
  1996. {null_term = 0;} break;
  1997. case 271:
  1998. # line 1507 "parser.y"
  1999. {
  2000.           if (text_dir)
  2001.             yyerror ("Can't put data in text segment");
  2002.         } break;
  2003. case 272:
  2004. # line 1512 "parser.y"
  2005. {null_term = 1;} break;
  2006. case 273:
  2007. # line 1513 "parser.y"
  2008. {
  2009.           if (text_dir)
  2010.             yyerror ("Can't put data in text segment");
  2011.         } break;
  2012. case 276:
  2013. # line 1525 "parser.y"
  2014. {store_op = store_byte;} break;
  2015. case 277:
  2016. # line 1527 "parser.y"
  2017. {
  2018.           if (text_dir)
  2019.             yyerror ("Can't put data in text segment");
  2020.         } break;
  2021. case 278:
  2022. # line 1534 "parser.y"
  2023. {
  2024.           align_data (2);
  2025.           if (lookup_label ((char *)yypvt[-1])->addr == 0)
  2026.             record_label ((char *)yypvt[-1], current_data_pc ());
  2027.           increment_data_pc (yypvt[-0]);
  2028.         } break;
  2029. case 279:
  2030. # line 1543 "parser.y"
  2031. {
  2032.           user_kernel_data_segment (0);
  2033.           data_dir = 1; text_dir = 0;
  2034.           enable_data_alignment ();
  2035.         } break;
  2036. case 280:
  2037. # line 1550 "parser.y"
  2038. {
  2039.           user_kernel_data_segment (0);
  2040.           data_dir = 1; text_dir = 0;
  2041.           enable_data_alignment ();
  2042.           set_data_pc (yypvt[-0]);
  2043.         } break;
  2044. case 281:
  2045. # line 1559 "parser.y"
  2046. {
  2047.           user_kernel_data_segment (1);
  2048.           data_dir = 1; text_dir = 0;
  2049.           enable_data_alignment ();
  2050.         } break;
  2051. case 282:
  2052. # line 1566 "parser.y"
  2053. {
  2054.           user_kernel_data_segment (1);
  2055.           data_dir = 1; text_dir = 0;
  2056.           enable_data_alignment ();
  2057.           set_data_pc (yypvt[-0]);
  2058.         } break;
  2059. case 283:
  2060. # line 1575 "parser.y"
  2061. {
  2062.           store_op = store_double;
  2063.           if (data_dir) set_data_alignment(3);
  2064.         } break;
  2065. case 284:
  2066. # line 1580 "parser.y"
  2067. {
  2068.           if (text_dir)
  2069.             yyerror ("Can't put data in text segment");
  2070.         } break;
  2071. case 290:
  2072. # line 1598 "parser.y"
  2073. {
  2074.           extern_directive ((char *)yypvt[-1], yypvt[-0]);
  2075.         } break;
  2076. case 291:
  2077. # line 1604 "parser.y"
  2078. {
  2079.           fatal_error ("File contains an .err directive\n");
  2080.         } break;
  2081. case 293:
  2082. # line 1613 "parser.y"
  2083. {
  2084.           store_op = store_float;
  2085.           if (data_dir) set_data_alignment (2);
  2086.         } break;
  2087. case 294:
  2088. # line 1618 "parser.y"
  2089. {
  2090.           if (text_dir)
  2091.             yyerror ("Can't put data in text segment");
  2092.         } break;
  2093. case 297:
  2094. # line 1630 "parser.y"
  2095. {
  2096.           make_label_global ((char *)yypvt[-0]);
  2097.         } break;
  2098. case 298:
  2099. # line 1636 "parser.y"
  2100. {
  2101.           store_op = store_half;
  2102.           if (data_dir) set_data_alignment (1);
  2103.         } break;
  2104. case 299:
  2105. # line 1641 "parser.y"
  2106. {
  2107.           if (text_dir)
  2108.             yyerror ("Can't put data in text segment");
  2109.         } break;
  2110. case 300:
  2111. # line 1648 "parser.y"
  2112. {
  2113.           record_label ((char *)yypvt[-0], (text_dir ? current_text_pc ()
  2114.                          : current_data_pc ()));
  2115.         } break;
  2116. case 301:
  2117. # line 1655 "parser.y"
  2118. {
  2119.           lcomm_directive ((char *)yypvt[-1], yypvt[-0]);
  2120.         } break;
  2121. case 307:
  2122. # line 1673 "parser.y"
  2123. {
  2124.           yyerror ("Warning: repeat directive ignored");
  2125.         } break;
  2126. case 308:
  2127. # line 1679 "parser.y"
  2128. {
  2129.           user_kernel_data_segment (0);
  2130.           data_dir = 1; text_dir = 0;
  2131.           enable_data_alignment ();
  2132.         } break;
  2133. case 309:
  2134. # line 1686 "parser.y"
  2135. {
  2136.           user_kernel_data_segment (0);
  2137.           data_dir = 1; text_dir = 0;
  2138.           enable_data_alignment ();
  2139.           set_data_pc (yypvt[-0]);
  2140.         } break;
  2141. case 310:
  2142. # line 1695 "parser.y"
  2143. {
  2144.           user_kernel_data_segment (0);
  2145.           data_dir = 1; text_dir = 0;
  2146.           enable_data_alignment ();
  2147.         } break;
  2148. case 311:
  2149. # line 1702 "parser.y"
  2150. {
  2151.           user_kernel_data_segment (0);
  2152.           data_dir = 1; text_dir = 0;
  2153.           enable_data_alignment ();
  2154.           set_data_pc (yypvt[-0]);
  2155.         } break;
  2156. case 312:
  2157. # line 1711 "parser.y"
  2158. {
  2159.           if (streq ((char *)yypvt[-0], "noat"))
  2160.             noat_flag = 1;
  2161.           else if (streq ((char *)yypvt[-0], "at"))
  2162.             noat_flag = 0;
  2163.         } break;
  2164. case 313:
  2165. # line 1720 "parser.y"
  2166. {
  2167.           if (data_dir)
  2168.             increment_data_pc (yypvt[-0]);
  2169.           else if (text_dir)
  2170.             increment_text_pc (yypvt[-0]);
  2171.         } break;
  2172. case 314:
  2173. # line 1729 "parser.y"
  2174. {
  2175.           yyerror ("Warning: struct directive ignored");
  2176.         } break;
  2177. case 315:
  2178. # line 1735 "parser.y"
  2179. {
  2180.           user_kernel_text_segment (0);
  2181.           data_dir = 0; text_dir = 1;
  2182.           enable_data_alignment ();
  2183.         } break;
  2184. case 316:
  2185. # line 1742 "parser.y"
  2186. {
  2187.           user_kernel_text_segment (0);
  2188.           data_dir = 0; text_dir = 1;
  2189.           enable_data_alignment ();
  2190.           set_text_pc (yypvt[-0]);
  2191.         } break;
  2192. case 317:
  2193. # line 1751 "parser.y"
  2194. {
  2195.           user_kernel_text_segment (1);
  2196.           data_dir = 0; text_dir = 1;
  2197.           enable_data_alignment ();
  2198.         } break;
  2199. case 318:
  2200. # line 1758 "parser.y"
  2201. {
  2202.           user_kernel_text_segment (1);
  2203.           data_dir = 0; text_dir = 1;
  2204.           enable_data_alignment ();
  2205.           set_text_pc (yypvt[-0]);
  2206.         } break;
  2207. case 321:
  2208. # line 1772 "parser.y"
  2209. {
  2210.           store_op = store_word_data;
  2211.           if (data_dir) set_data_alignment (2);
  2212.         } break;
  2213. case 323:
  2214. # line 1782 "parser.y"
  2215. {only_id = 1;} break;
  2216. case 324:
  2217. # line 1782 "parser.y"
  2218. {only_id = 0; yyval = yypvt[-0];} break;
  2219. case 325:
  2220. # line 1785 "parser.y"
  2221. {
  2222.           yyval = (int) make_addr_expr (0, NULL, yypvt[-1]);
  2223.         } break;
  2224. case 326:
  2225. # line 1790 "parser.y"
  2226. {
  2227.           yyval = (int) make_addr_expr (yypvt[-0], NULL, 0);
  2228.         } break;
  2229. case 327:
  2230. # line 1795 "parser.y"
  2231. {
  2232.           yyval = (int) make_addr_expr (yypvt[-3], NULL, yypvt[-1]);
  2233.         } break;
  2234. case 328:
  2235. # line 1800 "parser.y"
  2236. {
  2237.           yyval = (int) make_addr_expr (0, (char *)yypvt[-0], 0);
  2238.           if (yypvt[-0]) free ((char *)yypvt[-0]);
  2239.         } break;
  2240. case 329:
  2241. # line 1806 "parser.y"
  2242. {
  2243.           yyval = (int) make_addr_expr (0, (char *)yypvt[-3], yypvt[-1]);
  2244.           if (yypvt[-3]) free ((char *)yypvt[-3]);
  2245.         } break;
  2246. case 330:
  2247. # line 1812 "parser.y"
  2248. {
  2249.           yyval = (int) make_addr_expr (yypvt[-0], (char *)yypvt[-2], 0);
  2250.           if (yypvt[-2]) free ((char *)yypvt[-2]);
  2251.         } break;
  2252. case 331:
  2253. # line 1818 "parser.y"
  2254. {
  2255.           yyval = (int) make_addr_expr (yypvt[-2], (char *)yypvt[-0], 0);
  2256.         } break;
  2257. case 332:
  2258. # line 1823 "parser.y"
  2259. {
  2260.           yyval = (int) make_addr_expr (- yypvt[-0], (char *)yypvt[-2], 0);
  2261.           if (yypvt[-2]) free ((char *)yypvt[-2]);
  2262.         } break;
  2263. case 333:
  2264. # line 1829 "parser.y"
  2265. {
  2266.           yyval = (int) make_addr_expr (yypvt[-3], (char *)yypvt[-5], yypvt[-1]);
  2267.           if (yypvt[-5]) free ((char *)yypvt[-5]);
  2268.         } break;
  2269. case 334:
  2270. # line 1835 "parser.y"
  2271. {
  2272.           yyval = (int) make_addr_expr (- yypvt[-3], (char *)yypvt[-5], yypvt[-1]);
  2273.           if (yypvt[-5]) free ((char *)yypvt[-5]);
  2274.         } break;
  2275. case 335:
  2276. # line 1842 "parser.y"
  2277. {only_id = 1;} break;
  2278. case 336:
  2279. # line 1842 "parser.y"
  2280. {only_id = 0; yyval = yypvt[-0];} break;
  2281. case 337:
  2282. # line 1845 "parser.y"
  2283. {
  2284.           yyval = (int) make_imm_expr (yypvt[-0], NULL, 0);
  2285.         } break;
  2286. case 338:
  2287. # line 1850 "parser.y"
  2288. {
  2289.           yyval = (int) make_imm_expr (yypvt[-4] >> yypvt[-0], NULL, 0);
  2290.         } break;
  2291. case 339:
  2292. # line 1855 "parser.y"
  2293. {
  2294.           yyval = (int) make_imm_expr (0, (char *)yypvt[-0], 0);
  2295.         } break;
  2296. case 340:
  2297. # line 1860 "parser.y"
  2298. {
  2299.           yyval = (int) make_imm_expr (yypvt[-0], (char *)yypvt[-2], 0);
  2300.           free ((char *)yypvt[-2]);
  2301.         } break;
  2302. case 341:
  2303. # line 1866 "parser.y"
  2304. {
  2305.           yyval = (int) make_imm_expr (- yypvt[-0], (char *)yypvt[-2], 0);
  2306.           free ((char *)yypvt[-2]);
  2307.         } break;
  2308. case 343:
  2309. # line 1876 "parser.y"
  2310. {yyval = yypvt[-2] + yypvt[-0];} break;
  2311. case 344:
  2312. # line 1879 "parser.y"
  2313. {
  2314.           /* Y_INT '-' Y_INT */
  2315.           if (yypvt[-0] >= 0)
  2316.             yyerror ("Syntax error");
  2317.           yyval = yypvt[-1] - yypvt[-0];
  2318.         } break;
  2319. case 351:
  2320. # line 1900 "parser.y"
  2321. {
  2322.           if (yypvt[-0] < 0 || yypvt[-0] > 31)
  2323.             yyerror ("Register number out of range");
  2324.           if (yypvt[-0] == 1 && !bare_machine && !noat_flag)
  2325.             yyerror ("Register 1 is reserved for assembler");
  2326.           yyval = yypvt[-0];
  2327.         } break;
  2328. case 355:
  2329. # line 1915 "parser.y"
  2330. {
  2331.           if (yypvt[-0] < 0 || yypvt[-0] > 31)
  2332.             yyerror ("FP register number out of range");
  2333.           yyval = yypvt[-0];
  2334.         } break;
  2335. case 358:
  2336. # line 1930 "parser.y"
  2337. {
  2338.           yyval = (int) make_imm_expr (- current_text_pc (), (char *)yypvt[-0],
  2339.                         1);
  2340.         } break;
  2341. case 361:
  2342. # line 1942 "parser.y"
  2343. {
  2344.           store_string ((char *)yypvt[-0], y_str_length, null_term);
  2345.           free (yypvt[-0]);
  2346.         } break;
  2347. case 362:
  2348. # line 1947 "parser.y"
  2349. {
  2350.           int i;
  2351.  
  2352.           for (i = 0; i < yypvt[-0]; i ++)
  2353.             store_string ((char *)yypvt[-2], y_str_length, null_term);
  2354.           free (yypvt[-2]);
  2355.         } break;
  2356. case 363:
  2357. # line 1957 "parser.y"
  2358. {only_id = 1;} break;
  2359. case 364:
  2360. # line 1957 "parser.y"
  2361. {only_id = 0; yyval = yypvt[-0];} break;
  2362. case 366:
  2363. # line 1962 "parser.y"
  2364. {
  2365.           label *l = lookup_label ((char *)yypvt[-0]);
  2366.  
  2367.           if (l->addr == 0)
  2368.             {
  2369.               record_data_uses_symbol (current_data_pc (), l);
  2370.               yyval = 0;
  2371.             }
  2372.           else
  2373.             yyval = l->addr;
  2374.         } break;
  2375. case 367:
  2376. # line 1976 "parser.y"
  2377. {
  2378.           store_op (yypvt[-0]);
  2379.         } break;
  2380. case 368:
  2381. # line 1980 "parser.y"
  2382. {
  2383.           store_op (yypvt[-0]);
  2384.         } break;
  2385. case 369:
  2386. # line 1984 "parser.y"
  2387. {
  2388.           int i;
  2389.  
  2390.           for (i = 0; i < yypvt[-0]; i ++)
  2391.             store_op (yypvt[-2]);
  2392.         } break;
  2393. case 370:
  2394. # line 1994 "parser.y"
  2395. {
  2396.           store_op (yypvt[-0]);
  2397.         } break;
  2398. case 371:
  2399. # line 1998 "parser.y"
  2400. {
  2401.           store_op (yypvt[-0]);
  2402.         } break;
  2403. case 372:
  2404. # line 2004 "parser.y"
  2405. {only_id = 1;} break;
  2406. case 373:
  2407. # line 2004 "parser.y"
  2408. {only_id = 0; yyval = yypvt[-0];} break;
  2409. case 375:
  2410. # line 2007 "parser.y"
  2411. {yyval = 0;} break;
  2412. case 376:
  2413. # line 2011 "parser.y"
  2414. {only_id = 1;} break;
  2415. case 377:
  2416. # line 2011 "parser.y"
  2417. {only_id = 0; yyval = yypvt[-0];} break; 
  2418.         }
  2419.         goto yystack;  /* stack new state and value */
  2420.  
  2421.     }
  2422.